线程池处理多线程
2015-02-12 10:38
288 查看
class Program { static void Main(string[] args) { const int FibonacciCalculations = 20; // One event is used for each Fibonacci object. ManualResetEvent[] doneEvents = new ManualResetEvent[FibonacciCalculations]; Fibonacci[] fibArray = new Fibonacci[FibonacciCalculations]; Random r = new Random(); // Configure and start threads using ThreadPool. Console.WriteLine("发出 {0} 个任务...", FibonacciCalculations); for (int i = 0; i < FibonacciCalculations; i++) { doneEvents[i] = new ManualResetEvent(false); Fibonacci f = new Fibonacci(r.Next(20, 40), doneEvents[i]); fibArray[i] = f; ThreadPool.QueueUserWorkItem(f.ThreadPoolCallback, i); } // Wait for all threads in pool to calculate. WaitHandle.WaitAll(doneEvents); Console.WriteLine("所有的计算都是完整的"); // Display the results. for (int i = 0; i < FibonacciCalculations; i++) { Fibonacci f = fibArray[i]; Console.WriteLine("斐波那契 ({0}) = {1}", f.N, f.FibOfN); } Console.ReadLine(); } } public class Fibonacci { private int _n; private int _fibOfN; private ManualResetEvent _doneEvent; public int N { get { return _n; } } public int FibOfN { get { return _fibOfN; } } // Constructor. public Fibonacci(int n, ManualResetEvent doneEvent) { _n = n; _doneEvent = doneEvent; } // Wrapper method for use with thread pool. public void ThreadPoolCallback(Object threadContext) { int threadIndex = (int)threadContext; Console.WriteLine("线程 {0} 开始...", threadIndex); _fibOfN = Calculate(_n); Console.WriteLine("线程 {0} 计算结果.", threadIndex); _doneEvent.Set(); //终止该线程 Console.WriteLine("线程{0}终止", threadIndex); } // Recursive method that calculates the Nth Fibonacci number. public int Calculate(int n) { if (n <= 1) { return n; } return Calculate(n - 1) + Calculate(n - 2); } }
相关文章推荐
- Java:多线程,线程池,使用CompletionService通过Future来处理Callable的返回结果
- Java:多线程,线程池,使用CompletionService通过Future来处理Callable的返回结果
- Java:多线程,线程池,使用CompletionService通过Future来处理Callable的返回结果
- Java多线程,线程同步synchronized,线程死锁【线程池常规用法】多线程并发处理
- 线程池使用ExecutorService 多线程处理队列任务
- spring+ActiveMQ+JMS+线程池实现简单的分布式,多线程,多任务的异步任务处理系统
- Android 多线程处理之多线程用法--线程池
- 多线程,线程池,使用CompletionService通过Future来处理Callable的返回
- 多线程编程,处理多线程的并发问题(线程池)
- Android 多线程,线程池,并发处理以及ANR
- Android中的多线程处理(二)——使用线程池中的线程
- 线程池多线程处理
- Java多线程(线程池)快速处理大文件
- Java:多线程,线程池,使用CompletionService通过Future来处理Callable的返回结果
- 关于mangos多线程处理方式
- 处理WinForm多线程程序时的陷阱
- 批处理程序中的“多线程”处理代码
- SWT中处理多线程
- web策略类游戏开发(三) 多线程下数据库并发更新的处理
- 批处理程序中的“多线程”处理