最近闲暇之余,来搞搞,多线程学习,只为下个项目做准备,随着项目优化,开发,性能的考虑,慢慢要用到些以前不用的东西,先开始熟悉熟悉
先把东西放上来,欢迎大家赐教,比较好久木玩这东西了,肯定不完善,希望大家提出宝贵意见啊(嘿嘿~~)
大概功能描述:为了提高数据处理速度,把任务队列分别交给不同子线程去完成,同时对启动的新线程数量限制,避免线程数量过多照成机器卡壳
1 using System; 2 using System.Threading; 3 namespace ThreadTest 4 { 5 class ThreadMaxNum 6 { 7 static int NowThCount = 0;//当前已启动线程数量 8 static int MaxThCount = 5;//允许最大启动线程数量 9 static int RunNum = 15;//当前有多少个要处理的程序[任务队列] 10 public static void Run() 11 { 12 Thread NewTh; 13 while (true) 14 { 15 //当前没有活动线程,且 任务队列 为空 说明任务完成了 16 if (NowThCount == 0 && RunNum == 0) 17 break; 18 19 //任务队列为空 ,但是又线程运行中,就让主线程休息 下,在判断 20 if (RunNum == 0 && NowThCount != 0) 21 { 22 Thread.Sleep(2000);//休息 23 continue;//再次判断 24 } 25 26 //如果 当前活动线程数量 达到最大线程 就不在 开始新的任务 27 if (NowThCount >= MaxThCount) 28 { 29 Thread.Sleep(2000);//休息 30 continue;//再次判断 31 } 32 33 //有 队列>0,且没有达到最大 34 if (RunNum > 0 && NowThCount < MaxThCount) 35 { 36 //一个任务已经去执行了,应该减掉个,执行结果如何,这里不判断 37 RunNum--; 38 39 NewTh = new Thread(new ThreadStart(RunNewFun)); 40 NewTh.Start(); 41 } 42 } 43 Console.WriteLine("任务队列,执行完成:"+RunNum); 44 } 45 static void RunNewFun() 46 { 47 NowThCount++;//加个 48 49 Console.WriteLine("我是线程:" + Thread.CurrentThread.ManagedThreadId); 50 Thread.Sleep(3000); 51 Console.WriteLine("我是线程:" + Thread.CurrentThread.ManagedThreadId + ".....结束"); 52 53 NowThCount--;//减去 54 } 55 } 56 }
写在最后:感觉程序还不打完善,运行中会不会因为特殊原因照成异常,还在测试中…..