多線程學習之限制同時運行的線程數量


最近閑暇之余,來搞搞,多線程學習,只為下個項目做准備,隨着項目優化,開發,性能的考慮,慢慢要用到些以前不用的東西,先開始熟悉熟悉

先把東西放上來,歡迎大家賜教,比較好久木玩這東西了,肯定不完善,希望大家提出寶貴意見啊(嘿嘿~~)

 

大概功能描述:為了提高數據處理速度,把任務隊列分別交給不同子線程去完成,同時對啟動的新線程數量限制,避免線程數量過多照成機器卡殼

 

 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