java 線程池

  1. package com.nankang.test.thread; 
  2.  
  3. import java.util.concurrent.ExecutorService; 
  4. import java.util.concurrent.Executors; 
  5. import java.util.concurrent.LinkedBlockingQueue; 
  6. import java.util.concurrent.ThreadPoolExecutor; 
  7. import java.util.concurrent.TimeUnit; 
  8.  
  9. /** 
  10.  *  
  11.  * @author qianguangtao  
  12.  * 第2次任務的第1次執行 
  13.  * 第1次任務的第1次執行 
  14.  * 第3次任務的第1次執行 
  15.  * 第2次任務的第2次執行 
  16.  * 第3次任務的第2次執行 
  17.  * 第1次任務的第2次執行  
  18.  * 第2次任務的第3次執行  
  19.  * 第1次任務的第3次執行  
  20.  * 第3次任務的第3次執行 
  21.  * 第2次任務的第4次執行  
  22.  * 第3次任務的第4次執行  
  23.  * 第1次任務的第4次執行  
  24.  * 第4次任務的第1次執行  
  25.  * 第4次任務的第2次執行 
  26.  * 第4次任務的第3次執行  
  27.  * 第4次任務的第4次執行 
  28.  */ 
  29. public class TestFixedPool { 
  30.  
  31.     public static void main(String[] args) { 
  32.         // ThreadPoolExecutor threadPool = (ThreadPoolExecutor) 
  33.         // Executors.newCachedThreadPool(); //core 大小:0 max 大小:2147483647 
  34.         // ThreadPoolExecutor threadPool = (ThreadPoolExecutor) 
  35.         // Executors.newFixedThreadPool(3); //core 大小:3 max 大小:3 
  36.         ThreadPoolExecutor threadPool = (ThreadPoolExecutor) Executors 
  37.                 .newScheduledThreadPool(3); // core 大小:3 max 大小:2147483647 
  38.  
  39.         System.out.println("core 大小:" + threadPool.getCorePoolSize() 
  40.                 + " max 大小:" + threadPool.getMaximumPoolSize()); 
  41.         /* 
  42.          * 其實 newFixedThreadPool 是創建了一個 ThreadPoolExecutor return new 
  43.          * ThreadPoolExecutor(3[corePoolSize], 3[maximumPoolSize], 0L, 
  44.          * TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>()); 當 
  45.          * corePoolSize 和 maximumPoolSize 大小一樣時,即爲 newFixedThreadPool 
  46.          */ 
  47.         for (int i = 1; i < 5; i++) { 
  48.             final int taskID = i; 
  49.             threadPool.execute(new Runnable() { 
  50.                 // 也就是說最外層的 for 循環式正常運行的,execute 方法裏面的 for循環不一定立即執行 
  51.                 // execute(thread);  在未來的某個時間執行給定命令。該命令可能在新的線程,已入池的線程,後者正在調用的線程中執行,由Executor實現決定 
  52.                 public void run() { 
  53.                     for (int i = 1; i < 5; i++) { 
  54.                         System.out.println("第" + taskID + "次任務的第" + i + "次執行"); 
  55.                         try { 
  56.                             Thread.sleep(2000);// 爲了測試出效果,讓每次任務執行都需要一定時間 
  57.                         } catch (InterruptedException e) { 
  58.                             e.printStackTrace(); 
  59.                         } 
  60.                     } 
  61.                 } 
  62.             }); 
  63.         } 
  64.         threadPool.shutdown();// 任務執行完畢,關閉線程池 ,線程池會自動關閉,即使沒有調用 shutdown(); 
  65.     } 
  66.  

 

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