等待线程池内线程执行完成的一种方法
2011-12-16 14:55
615 查看
本文主要内容:通过AutoResetEvent实现等待线程池内线程执行完成,并进行计时计算。
由于方法比较简单直接贴出代码,如下:
由于方法比较简单直接贴出代码,如下:
/// <summary> /// 等待线程池内的所有线程执行完成的一种方法 /// </summary> public class ExecutedThreadPool { public void ThreadPoolFinish() { int iterations = 10;//迭代的次数 int doneCount = iterations;//用于AutoResetEvent返回信号量 int display = 0;//方便观察结果的数据显示 AutoResetEvent done = new AutoResetEvent(false); DateTime startDt = DateTime.Now;//用作时间开始的计时,和最终执行完成多线程的时间比较。目的:验证watcher的时间 Stopwatch watcher = Stopwatch.StartNew(); for (int i = 0; i < iterations; i++) { ThreadPool.QueueUserWorkItem(r => { Thread.Sleep(1000);//方便观察时间差 Console.WriteLine(string.Format("DateTime:{0},Number:{1}", DateTime.Now, Interlocked.Increment(ref display))); if (Interlocked.Decrement(ref doneCount) == 0) { done.Set();//发出信号量 } }); } done.WaitOne();//阻止当前线程,直到接收到信号量 Console.WriteLine(string.Format("Elapsed:{0},Start Time:{1}", watcher.Elapsed, startDt)); } }
相关文章推荐
- java中等待其他线程执行完成之后,再去执行别的方法
- 一种利用线程池线程执行任务, 并能够结束超时任务的方法 (.NET实现)
- Java中等待提交线程池的所有线程执行完成
- 两个带有线程池的方法分别执行两组线程任务,第二个方法需要等待第一组任务执行完毕
- Thread.join()方法实现main()方法等待所有子线程执行完成[base jdk8]
- 子线程返回前,使循环暂停但不使主线程卡死的办法,等待子线程有返回了之后,才执行主线程下一步代码的方法
- c#等待所有子线程执行完毕方法
- 如何等待一个线程完成后才继续执行之后的操作
- 重新想象 Windows 8 Store Apps (42) - 多线程之线程池: 延迟执行, 周期执行, 在线程池中找一个线程去执行指定的方法
- Java后台执行Shell脚本, Java方法不用等待Shell程序执行完成并保证关掉Java程序Shell脚本正常运行
- JAVA主线程等待所有子线程执行完成后主线程再执行
- 进阶篇:等待多个子线程完毕再执行主线程的方法之CountDownLatch(十二)
- .Net最简单的创建多线程主线程等待所有线程执行完成的例子
- 多线程之join()方法---(Thread提供的让一个线程等待另一个线程完成的方法)
- java并发编程学习:如何等待多个线程执行完成后再继续后续处理(synchronized、join、FutureTask、CyclicBarrier)
- CountDownLatch,一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待
- Java多线程执行,主程序等待其他线程执行完成
- java线程池主线程等待子线程执行完成
- java中等待一些线程执行完之后,再去执行别的方法(后者需要使用前者返回的结果)
- CountDownLatch使用countDown方法来触发其他等待线程再执行的问题