創建線程池

 線程池的作用:

線程池作用就是限制系統中執行線程的數量。
根據系統的環境情況,可以自動或手動設置線程數量,達到運行的最佳效果;少了浪費了系統資源,多了造成系統擁擠效率不高。用線程池控制線程數量,其他線程排隊等候。一個任務執行完畢,再從隊列的中取最前面的任務開始執行。若隊列中沒有等待進程,線程池的這一資源處於等待。當一個新任務需要運行時,如果線程池中有等待的工作線程,就可以開始運行了;否則進入等待隊列。

 

爲什麼要用線程池:

  1. 減少了創建和銷燬線程的次數,每個工作線程都可以被重複利用,可執行多個任務
  2. 可以根據系統的承受能力,調整線程池中工作線線程的數目,防止因爲因爲消耗過多的內存,而把服務器累趴下(每個線程需要大約1MB內存,線程開的越多,消耗的內存也就越大,最後死機)

線程池類

  1. package com.tdt.test; 
  2.  
  3. import com.tdt.impl.ls.ThreadPool; 
  4.  
  5. public class ThreadPoolTest { 
  6.      
  7.     public static void main(String[] args) throws InterruptedException { 
  8.         ThreadPool threadPool = new ThreadPool(3); //創建一個有個3工作線程的線程池 
  9.         Thread.sleep(500); //休眠500毫秒,以便讓線程池中的工作線程全部運行 
  10.         //運行任務 
  11.         for (int i = 0; i <=5 ; i++) { //創建6個任務 
  12.             threadPool.execute(createTask(i)); 
  13.         } 
  14.         threadPool.waitFinish(); //等待所有任務執行完畢 
  15.         threadPool.closePool(); //關閉線程池 
  16.  
  17.     } 
  18.  
  19.     private static Runnable createTask(final int taskID) { 
  20.         return new Runnable() { 
  21.             public void run() { 
  22.             //  System.out.println("Task" + taskID + "開始"); 
  23.                 System.out.println("Hello world"); 
  24.             //  System.out.println("Task" + taskID + "結束"); 
  25.             } 
  26.         }; 
  27.     } 

結果;

 

  1. 工作線程0等待任務... 
  2. 工作線程1等待任務... 
  3. 工作線程2等待任務... 
  4.  
  5. 工作線程0開始執行任務... 
  6. Hello world 
  7. 工作線程0等待任務... 
  8.  
  9. 工作線程1開始執行任務... 
  10. Hello world 
  11. 工作線程1等待任務... 
  12.  
  13. 工作線程2開始執行任務... 
  14. Hello world 
  15. 工作線程2等待任務... 
  16.  
  17. 工作線程0開始執行任務... 
  18. Hello world 
  19. 工作線程0等待任務... 
  20.  
  21. 工作線程1開始執行任務... 
  22. Hello world 
  23. 工作線程1等待任務... 
  24.  
  25. 工作線程2開始執行任務... 
  26. Hello world 
  27. 工作線程2等待任務... 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章