Thread随便讲讲

  因为在C#中,Thread类在我们的新业务上并不常用了(因为创建一个新线程要比直接从线程池拿线程更加耗费资源),并且在.NET4.0后新增了Task类即Async与await关键字,使得我们基本不再用Thread了,不过在学习多线程前,有必要先了解下Thread类,这里就先随便讲讲Thread。

1.使用多线程的几种方式

  多线程Thread类只支持运行两种方法,一种是无参数并且无返回值的方法,第二种是有一个Object类型参数(有且只能有一个参数,并且必须是Object类型)且无返回值的方法。如果想让多线程方法携带多个参数,可以将多个参数放入一个集合或数组中传入方法。

  下面例子使用了控制台来演示多线程的简单使用:

复制代码
using System; using System.Threading;  namespace ConsoleApplication1 {     class Program     {         //无参数无返回值方法         public static void DoSomething()         {             for (int i = 0; i < 100; i++)             {                 Thread.Sleep(500);             }         }         //有参数无返回值方法         public static void DoSomethingWithParameter(object obj)         {             for (int i = 0; i < (int)obj; i++)             {                 Console.WriteLine(Thread.CurrentThread.ManagedThreadId);                 Thread.Sleep(500);             }         }              static void Main(string[] args)         {             //获取主线程ID             int currentThreadId = Thread.CurrentThread.ManagedThreadId;             Console.WriteLine($"---------主线程<{currentThreadId}>开始运行---------");             //多线程运行无参数方法方式1             ThreadStart ts = DoSomething;//ThreadStart是一个无参数,无返回值的委托             Thread thread1 = new Thread(ts);             thread1.Start();                          //多线程运行无参数方法方式2             Thread thread2 = new Thread(DoSomething);//可省略ThreadStart             thread2.Start();              //多线程运行有参数方法方式1             //ParameterizedThreadStart是一个有一个Object类型参数,但是无返回值的委托。             ParameterizedThreadStart pts = DoSomethingWithParameter;             Thread thread3 = new Thread(pts);             thread3.Start(100);                          //多线程运行有参数方法方式2             //可以省略ParameterizedThreadStart             Thread thread4 = new Thread(DoSomethingWithParameter);             thread4.Start(100);              //还可以使用lamda表达式简化多线程写法             new Thread(() =>             {                 for (int i =