线程池设置最多M线程执行N个任务
2017-07-29 18:20
260 查看
转载地址:http://www.ithao123.cn/content-4805192.html
转载地址:http://www.ithao123.cn/content-4805192.html
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; namespace 多线程池试验 { class Program { public static void Main() { //新建ManualResetEvent对象并且初始化为无信号状态 ManualResetEvent eventX = new ManualResetEvent(false); ThreadPool.SetMaxThreads(3, 3); thr t = new thr(15, eventX); for (int i = 0; i < 15; i++) { ThreadPool.QueueUserWorkItem(new WaitCallback(t.ThreadProc), i); } //等待事件的完成,即线程调用ManualResetEvent.Set()方法 //eventX.WaitOne 阻止当前线程,直到当前 WaitHandle 收到信号为止。 eventX.WaitOne(Timeout.Infinite, true); Console.WriteLine("断点测试"); Thread.Sleep(10000); Console.WriteLine("运行结束"); } public class thr { public thr(int count,ManualResetEvent mre) { iMaxCount = count; eventX = mre; } public static int iCount = 0; public static int iMaxCount = 0; public ManualResetEvent eventX; public void ThreadProc(object i) { Console.WriteLine("Thread[" + i.ToString() + "]"); Thread.Sleep(2000); //Interlocked.Increment()操作是一个原子操作,作用是:iCount++ 具体请看下面说明 //原子操作,就是不能被更高等级中断抢夺优先的操作。你既然提这个问题,我就说深一点。 //由于操作系统大部分时间处于开中断状态, //所以,一个程序在执行的时候可能被优先级更高的线程中断。 //而有些操作是不能被中断的,不然会出现无法还原的后果,这时候,这些操作就需要原子操作。 //就是不能被中断的操作。 Interlocked.Increment(ref iCount); if (iCount == iMaxCount) { Console.WriteLine("发出结束信号!"); //将事件状态设置为终止状态,允许一个或多个等待线程继续。 eventX.Set(); } } } } }
转载地址:http://www.ithao123.cn/content-4805192.html
相关文章推荐
- C# 执行固定个数任务自行控制进入线程池的线程数量,多任务同时但是并发数据限定
- 一种利用线程池线程执行任务, 并能够结束超时任务的方法 (.NET实现)
- 两个带有线程池的方法分别执行两组线程任务,第二个方法需要等待第一组任务执行完毕
- 多线程线程池控制一个方法的并发量 限制只有5个线程执行任务
- C# 执行固定个数任务自行控制进入线程池的线程数量,多任务同时但是并发数据限定
- Hadoop设置任务执行队列及优先级
- 在WINDOWS中设置计划任务执行PHP文件
- Linux下如何定时执行php脚本?Linux下如何设置定时任务?Crontab定时执行程序
- spring 定时任务的 执行时间设置规则(转)
- Android设置定时执行执行一次任务
- Hadoop 设置任务执行的队列以及优先级和其他 配置
- JDK5.0 特性-线程任务执行架构 ScheduledExecutorService
- oracle设置定时任务job调度执行存储过程或pl/sql代码块
- linux crontab设置正确,定时任务无法执行问题
- centos 设置定时任务执行指定脚本与Crontab的格式
- C# 线程池中的线程都执行后,执行主线程中输出
- 在WINDOWS中设置计划任务执行PHP文件的方法
- Android中使用Handler和异步任务(AsyncTack)来为UI线程执行费时操作
- 多个线程的同步(所有任务都完成之后再向下执行)--转
- Hadoop 设置任务执行的队列以及优先级