多线程学习之限制同时运行的线程数量
2013-05-14 15:43
295 查看
最近闲暇之余,来搞搞,多线程学习,只为下个项目做准备,随着项目优化,开发,性能的考虑,慢慢要用到些以前不用的东西,先开始熟悉熟悉
先把东西放上来,欢迎大家赐教,比较好久木玩这东西了,肯定不完善,希望大家提出宝贵意见啊(嘿嘿~~)
大概功能描述:为了提高数据处理速度,把任务队列分别交给不同子线程去完成,同时对启动的新线程数量限制,避免线程数量过多照成机器卡壳
写在最后:感觉程序还不打完善,运行中会不会因为特殊原因照成异常,还在测试中…..
先把东西放上来,欢迎大家赐教,比较好久木玩这东西了,肯定不完善,希望大家提出宝贵意见啊(嘿嘿~~)
大概功能描述:为了提高数据处理速度,把任务队列分别交给不同子线程去完成,同时对启动的新线程数量限制,避免线程数量过多照成机器卡壳
using System; using System.Threading; namespace ThreadTest { class ThreadMaxNum { static int NowThCount = 0;//当前已启动线程数量 static int MaxThCount = 5;//允许最大启动线程数量 static int RunNum = 15;//当前有多少个要处理的程序[任务队列] public static void Run() { Thread NewTh; while (true) { //当前没有活动线程,且 任务队列 为空 说明任务完成了 if (NowThCount == 0 && RunNum == 0) break; //任务队列为空 ,但是又线程运行中,就让主线程休息 下,在判断 if (RunNum == 0 && NowThCount != 0) { Thread.Sleep(2000);//休息 continue;//再次判断 } //如果 当前活动线程数量 达到最大线程 就不在 开始新的任务 if (NowThCount >= MaxThCount) { Thread.Sleep(2000);//休息 continue;//再次判断 } //有 队列>0,且没有达到最大 if (RunNum > 0 && NowThCount < MaxThCount) { //一个任务已经去执行了,应该减掉个,执行结果如何,这里不判断 RunNum--; NewTh = new Thread(new ThreadStart(RunNewFun)); NewTh.Start(); } } Console.WriteLine("任务队列,执行完成:"+RunNum); } static void RunNewFun() { NowThCount++;//加个 Console.WriteLine("我是线程:" + Thread.CurrentThread.ManagedThreadId); Thread.Sleep(3000); Console.WriteLine("我是线程:" + Thread.CurrentThread.ManagedThreadId + ".....结束"); NowThCount--;//减去 } } }
写在最后:感觉程序还不打完善,运行中会不会因为特殊原因照成异常,还在测试中…..
相关文章推荐
- 多线程学习之限制同时运行的线程数量
- python多线程之限制同时运行的线程个数
- C++ windows多线程 线程描述了进程内代码的执行路径。进程中同时可以有多个线程在执行,为了使他们能够同时运行,操作系统为每个线程轮流分配CPU时间片,为了充分地利用CPU提高软件产品的性能,一
- 6.多线程学习--守护线程的创建和运行
- JAVA基础学习--一个线程加一运算,一个线程做减一运算,多个线程同时交替运行--synchronized
- JAVA基础学习(十一)--多线程一线程的创建,运行,同步和锁
- 基础学习day11--多线程一线程的创建,运行,同步和锁
- 6.多线程学习--守护线程的创建和运行
- 限制Java线程池运行线程以及等待线程数量的策略
- 【Java学习】java线程-多线程理解
- Java多线程编程--(10)学习Java5.0 并发编程包--线程工具类
- java多线程学习之Condition,实现唤醒指定的部分线程
- C++并发编程——在运行时选择线程数量
- Python 限制线程的最大数量(Semaphore)
- java多线程学习总结之四:线程的同步
- 张孝祥[致敬]-多线程学习第04课-线程的通信机制
- 提供一个“多线程(或进程)同时退出时判断是哪些线程退出”的方法
- java多线程 学习笔记(二)——线程执行器 Executor
- Java多线程与并发学习之(一):进程与线程