線程池筆記(一)

線程池類別

Executors 下有五類線程池
在這裏插入圖片描述

參數介紹:

  • corePoolSize:核心線程數,核心線程會一直存活。
  • maximumPoolSize:最大線程數,決定線程池最多可以創建多少線程。
  • keepAliveTime:空閒時間,當線程閒置超過空閒時間時就會被銷燬。
  • uint:空閒時間的單位。
  • workQueue:緩衝隊列
  • ArrayBlockingQueue:有界隊列,有最大容量閒置。
  • LinkedBlockingQueue:無界隊列,不限制容量。
  • SynchronousQueue:同步隊列,內部沒有緩衝區。
  • threadFactory:設置線程池工廠方法,用來創建新的線程方法,可以對線程的屬性進行定製,例如線程的group,線程名等,一般使用默認的工廠類即可。
  • handler:線程池滿時的拒絕策略,
  • Abort:線程池滿後,提交新任務時,會拋出異常,默認拒絕策略。
  • Discard:線程池滿後,提交新任務時,對任務進行丟棄。
  • CallerRuns:線程池滿後,提交新任務時,會直接執行提交的任務。
  • DiscardOldest:線程池滿後,提交新任務時,會丟棄最早提交的任務。

各類線程池調用參數方法

固定大小線程池:

  • -corePoolSize和maximumPoolSize:設置成指定的線程數
  • workQueue:LinkedBlockingQueue
源碼
 public static ExecutorService newFixedThreadPool(int nThreads) {
        return new ThreadPoolExecutor(nThreads, nThreads,
                                      0L, TimeUnit.MILLISECONDS,
                                      new LinkedBlockingQueue<Runnable>());
    }

Cached線程池:

  • corePoolSize:0
  • maximumPoolSize:Integer.MAX_VALUE
  • keepAliveTime:60
  • workQueue:SynchronousQueue
源碼
public static ExecutorService newCachedThreadPool() {
        return new ThreadPoolExecutor(0, Integer.MAX_VALUE,
                                      60L, TimeUnit.SECONDS,
                                      new SynchronousQueue<Runnable>());
    }

單線程線程池:

  • corePoolSize和maximumPoolSize:1
源碼
 public static ExecutorService newSingleThreadExecutor() {
       return new FinalizableDelegatedExecutorService
           (new ThreadPoolExecutor(1, 1,
                                   0L, TimeUnit.MILLISECONDS,
                                   new LinkedBlockingQueue<Runnable>()));
   }

Scheduled線程池:

  • workQueue:DelayWorkQueue,按延遲時間獲取任務的優先級隊列
源碼
   public static ScheduledExecutorService newScheduledThreadPool(int corePoolSize) {
       return new ScheduledThreadPoolExecutor(corePoolSize);
   }

線程池任務執行流程

在這裏插入圖片描述

調用方法:
  • 1、execute
  • 2、submit:可以返回一個future對象,根據future對象可以瞭解任務的執行情況,可以取消任務的執行,還可以獲取任務的執行結果或者執行異常。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章