异步委托开启线程
public class Program{public static void Main(string[] args){Action<int, int> a = add;a.BeginInvoke(3, 4, null, null);Console.WriteLine("执行线程");Console.ReadKey();}static void add(int a, int b){Console.WriteLine(a + b);}}
通过Thread类开启线程
public class Program{public static void Main(string[] args){Thread t1;Thread t2;t1 = new Thread(SetInfo1);t2 = new Thread(SetInfo2);t1.Start();//线程睡眠//t1.Join(1000);//挂起线程t1.Suspend();//继续执行线程t1.Resume();//结束线程//t1.Abort();t2.Start();Console.ReadKey();}//奇数线程public static void SetInfo1(){for (int i = 0; i < 100; i++){if (i % 2 != 0){Console.WriteLine("奇数为" + i);}}}//偶数线程public static void SetInfo2(){for (int i = 0; i < 100; i++){if (i % 2 == 0){Console.WriteLine("偶数为" + i);}}}}
通过线程池开启线程
//线程池可以看做容纳线程的容器;一个应用程序最多只能有一个线程池;ThreadPool静态类通过QueueUserWorkItem()方法将工作函数排入线程池; 每排入一个工作函数,就相当于请求创建一个线程;//线程池的作用://1、线程池是为突然大量爆发的线程设计的,通过有限的几个固定线程为大量的操作服务,减少了创建和销毁线程所需的时间,从而提高效率。//2、如果一个线程的时间非常长,就没必要用线程池了(不是不能作长时间操作,而是不宜。),况且我们还不能控制线程池中线程的开始、挂起、和中止public class Program{public static void Main(string[] args){ThreadPool.QueueUserWorkItem(new WaitCallback(TestThreadPool), new string[] { "hjh" });Console.ReadKey();}public static void TestThreadPool(object state){string[] arry = state as string[];//传过来的参数值int workerThreads = 0;int CompletionPortThreads = 0;ThreadPool.GetMaxThreads(out workerThreads, out CompletionPortThreads);Console.WriteLine(DateTime.Now.ToString() + "---" + arry[0] + "--workerThreads=" + workerThreads + "--CompletionPortThreads" + CompletionPortThreads);}}
通过任务Task开启线程
public class Program{public static void Main(string[] args){Task task = new Task(DownLoadFile_My);task.Start();Console.ReadKey();}static void DownLoadFile_My(){Console.WriteLine("开始下载...线程ID:"+Thread.CurrentThread.ManagedThreadId);Thread.Sleep(500);Console.WriteLine("下载完成!");}}
