在项目中经常用到线程Thread,先做个简单记录,后面再完善下,方便以后参考。本人技术有限,如有不同见解之处,欢迎博友批评指正。

执行的线程Thread分无参数的,一个参数,多个参数的。直接看代码吧。

NetFramework4.0后,出现了Task(本质还是Thread),这个效率更高,分配资源更合理。

一、没有参数的

        static void Main(string[] args)
{
Console.WriteLine("主线程开始了...");
Console.WriteLine("主线程Thread:"+Thread.CurrentThread.ManagedThreadId);
Thread thread = new Thread(ThreadTestMthod);
thread.Start();
for (int i = ; i < ; i++)
{
Console.WriteLine("Num:"+i);
} Console.ReadKey();
}
static void ThreadTestMthod()
{
Console.WriteLine("当前线程Thread:"+Thread.CurrentThread.ManagedThreadId);
for (int i = ; i < ; i++)
{
Console.WriteLine("Num:"+i);
}
}

二、一个参数

        static void Main(string[] args)
{
Console.WriteLine("主线程开始了...");
Console.WriteLine("主线程Thread:" + Thread.CurrentThread.ManagedThreadId);
Thread threadParam = new Thread(ThreadTestMthodParam);
//或者Thread threadPapam2 = new Thread(new ThreadStart(() => ThreadTestMthodParam(100)));
//再或者 Thread threadPapam3 = new Thread(() => ThreadTestMthodParam(100));
threadParam.Start(); for (int i = ; i < ; i++)
{
Console.WriteLine("Num:" + i);
} Console.ReadKey();
}
static void ThreadTestMthodParam(object n)
{
int num = Convert.ToInt32(n);
Console.WriteLine("有1个参数Thread:" + Thread.CurrentThread.ManagedThreadId);
for (int i = ; i < num; i++)
{
Console.WriteLine("Num:" + i);
}
}

三、多个参数

其实看到上面你也想到了,可以利用后面的Lambda表达式来表示。

        static void Main(string[] args)
{
Console.WriteLine("主线程开始了...");
Console.WriteLine("主线程Thread:" + Thread.CurrentThread.ManagedThreadId);
Thread threadParams = new Thread(() => ThreadTestMthodParams(, ));
//或者Thread threadParams = new Thread(new ThreadStart(() => ThreadTestMthodParams(100, 200))); threadParams.Start(); for (int i = ; i < ; i++)
{
Console.WriteLine("Num:" + i);
} Console.ReadKey();
}
static void ThreadTestMthodParams(int min, int max)
{
Console.WriteLine("多个参数Thread:" + Thread.CurrentThread.ManagedThreadId);
for (int i = min; i < max; i++)
{
Console.WriteLine("Num:" + i);
}
}

用Task来操作

            Task t1 = new Task(ThreadTestMthod);
t1.Start(); Task t2 = new Task(() => ThreadTestMthodParams(,));
t2.Start();

C#多线程Thread的更多相关文章

  1. c#中@标志的作用 C#通过序列化实现深表复制 细说并发编程-TPL 大数据量下DataTable To List效率对比 【转载】C#工具类:实现文件操作File的工具类 异步多线程 Async .net 多线程 Thread ThreadPool Task .Net 反射学习

    c#中@标志的作用   参考微软官方文档-特殊字符@,地址 https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/toke ...

  2. 2.匿名类,匿名类对象,private/protected/public关键字、abstract抽象类,抽象方法、final关键字的使用,多线程Thread类start方法原理

    package com.bawei.multithread; //注意:模板方法我们通常使用抽象类或者抽象方法!这里我们为了方便在本类中使用就没有使用抽象类/抽象方法 public class Tem ...

  3. 多线程-Thread和ThreadPool

    多线程原理 多线程都是基于委托的. 多线程优缺点 缺点: 1.导致程序复杂,开发调试维护困难,特别是线程交互. 2.线程过多导致服务器卡死,因为占用CPU 内存等资源. 优点: 1.良好的交互,特别对 ...

  4. Java多线程Thread

    转自:http://www.cnblogs.com/lwbqqyumidi/p/3804883.html Java总结篇系列:Java多线程(一)   多线程作为Java中很重要的一个知识点,在此还是 ...

  5. java 多线程--- Thread Runnable Executors

    java 实现多线程的整理: Thread实现多线程的两种方式: (1)继承 Thread类,同时重载 run 方法: class PrimeThread extends Thread { long ...

  6. python进阶学习笔记(四)--多线程thread

    在使用多线程之前,我们首页要理解什么是进程和线程. 什么是进程? 计算机程序只不过是磁盘中可执行的,二进制(或其它类型)的数据.它们只有在被读取到内存中,被操作系统调用的时候才开始它们的生命期.进程( ...

  7. php多线程thread开发与应用的例子

    Php多线程的使用,首先需要PHP5.3以上版本,并安装pthreads PHP扩展,可以使PHP真正的支持多线程,扩展如何安装请自行百度 PHP扩展下载:https://github.com/kra ...

  8. 多线程(Thread),其实很简单!

    目录:  1:线程简介 2:怎么操作线程      3:Thread的常用方法 4:简单的获奖机     5:应用程序域   线程:是Windows任务调度的最小单位.线程是程序中的一个执行流,每个线 ...

  9. 【C#多线程】C#多线程 Thread 开发基础

    引用 using System; using System.Threading; 多线程代码 Thread mainthread = new Thread(ExecuteThread); mainth ...

  10. android 多线程Thread,Runnable,Handler,AsyncTask

    先看两个链接: 1.http://www.2cto.com/kf/201404/290494.html 2. 链接1: android 的多线程实际上就是java的多线程.android的UI线程又称 ...

随机推荐

  1. Luogu P1608 路径统计 最短路计数

    颓了...重边导致我乖乖用邻接矩阵.... 好吧就是个最短路计数....如果更新时d[v]==d[u]+w[i],就可以接起来,把两个加在一起.. 如果d[v]>d[u]+w[i],那么c[v] ...

  2. django文件配置

    先是 staticfile 文件配制 STATTCFILE=(os.path.join(BASE_DIR,'static'),) 然后是数据库配置  : DATABASES = { 'default' ...

  3. 删除重复数据,保留一条ID最小的

    SELECT * from TBCITY_Temp where code  in (  select    code    from TBCITY_Temp    group by code  hav ...

  4. SpringBoot中使用Servlet

    1.在入口Application类上加入注解@ServletComponentScan @SpringBootApplication @ServletComponentScan public clas ...

  5. JS 中Math.ceil()、Math.floor()和Math.round()的区别

    var arg1 = 12.2; var arg2 = 12.5; var arg3 = 12.7; ceil():将小数部分一律向整数部分进位 var c1 = Math.ceil(arg1); v ...

  6. python迭代器、生成器、列表推倒式

    创建迭代器: iter( ): 创建迭代器 next( ): 返回迭代器的下一个element(元素) 实例题: >>> list = [1,2,3,4] >>> ...

  7. android Activity启动过程(四)startActivityUncheckedLocked

    final int startActivityUncheckedLocked(ActivityRecord r, ActivityRecord sourceRecord, IVoiceInteract ...

  8. python3+Appium自动化11-data数据封装之python读取csv文件

    使用背景 实际项目中,我们的测试数据可能存储在一个数据文件中,如txt.excel.csv文件类型.我们可以封装一些方法来读取文件中的数据来实现数据驱动 enumerate()简介 enumerate ...

  9. override javascript escape funcation

    var oldescape = window.escape; escape = function (sStr) { return oldescape(sStr).replace(/\+/g, '%2B ...

  10. python 常见的异常类型

    python标准异常异常名称 描述BaseException 所有异常的基类SystemExit 解释器请求退出KeyboardInterrupt 用户中断执行(通常是输入^C)Exception 常 ...