最近閑暇之余,來搞搞,多線程學習,只為下個項目做准備,隨着項目優化,開發,性能的考慮,慢慢要用到些以前不用的東西,先開始熟悉熟悉
先把東西放上來,歡迎大家賜教,比較好久木玩這東西了,肯定不完善,希望大家提出寶貴意見啊(嘿嘿~~)
大概功能描述:為了提高數據處理速度,把任務隊列分別交給不同子線程去完成,同時對啟動的新線程數量限制,避免線程數量過多照成機器卡殼
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 }
寫在最后:感覺程序還不打完善,運行中會不會因為特殊原因照成異常,還在測試中…..