线程池是单例,一个进程里只有一个线程池
private void btnThreadPool_Click(object sender, EventArgs e) { Stopwatch watch = new Stopwatch(); watch.Start(); Console.WriteLine(); Console.WriteLine("****************btnThreadPool_Click Start 主线程id={0}*****************", Thread.CurrentThread.ManagedThreadId); List<ManualResetEvent> mreList = new List<ManualResetEvent>(); for (int i = 0; i < 5; i++) { int b = i; mreList.Add(new ManualResetEvent(false)); WaitCallback method = t => { this.TestThreadWithoutReturn(string.Format("btnThreadPool_Click_{0}", b)); Console.WriteLine("我是回调 btnThreadPool_Click_{0}", b); mreList[b].Set(); }; ThreadPool.QueueUserWorkItem(method); //WaitCallback method = t => this.TestThreadWithoutReturn(t.ToString ()); //ThreadPool.QueueUserWorkItem(method, string.Format("btnThreadPool_Click_{0}", b)); }
private void TestThreadWithoutReturn(string name) { Console.WriteLine("TestThread Start Name={2},当前线程的id:{0},当前时间为{1}", Thread.CurrentThread.ManagedThreadId, DateTime.Now.ToString("hh:mm:ss:fff"), name); long Sum = 0; for (int i = 1; i < 999999999; i++) { Sum += i; } //Thread.Sleep(2000); Console.WriteLine("TestThread End Name={2},当前线程的id:{0},当前时间为{1}", Thread.CurrentThread.ManagedThreadId, DateTime.Now.ToString("hh:mm:ss:fff"), name); }