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

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

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

 

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

 

 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 }

 

 

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

你可能感兴趣的:(多线程)