多线程学习之限制同时运行的线程数量


最近闲暇之余,来搞搞,多线程学习,只为下个项目做准备,随着项目优化,开发,性能的考虑,慢慢要用到些以前不用的东西,先开始熟悉熟悉

先把东西放上来,欢迎大家赐教,比较好久木玩这东西了,肯定不完善,希望大家提出宝贵意见啊(嘿嘿~~)

 

大概功能描述:为了提高数据处理速度,把任务队列分别交给不同子线程去完成,同时对启动的新线程数量限制,避免线程数量过多照成机器卡壳

 

 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 }

 

 

写在最后:感觉程序还不打完善,运行中会不会因为特殊原因照成异常,还在测试中…..


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM