線程池

參數(shù) 意義
corePoolsize 線程池核心線程數(shù)
workQueue 存放提交的task
maximumPoolSize 線程池中允許最大線程數(shù)
threalFactory 線程工廠,用于創(chuàng)建線程,由Excutors#defultThrealFactory實現(xiàn)
keepAliveTime 空閑線程存活時間(默認是臨時線程,也可設置為核心線程)
unit 空閑時間線程存活時間單位枚舉

線程池流程

1.當workers.size()小于corePoolSize時, 創(chuàng)建新的線程執(zhí)行提交的task

2.當workers.size()大于corePoolSize時, 并且workQueue沒有滿將task添加到workQueue.

3.當workers.size()大于corePoolSize時,并且workQueue已經(jīng)滿了,workers.size()<maximumPoolSize,就創(chuàng)建一個臨時線程處理task

4.當workers.size()大于corePoolSize時, 并且workQueue已經(jīng)滿了, 并且workers.size()>=maximumPoolSize, 執(zhí)行拒絕策略

4種默認的拒絕策略:
ThreadPoolExecutor默認實現(xiàn)的4種拒絕策略.

  • AbortPolicy -- 當任務添加到線程池中被拒絕時,它將拋出 RejectedExecutionException 異常。
  • CallerRunsPolicy -- 當任務添加到線程池中被拒絕時,會在線程池當前正在運行的Thread線程池中處理被拒絕的任務。
  • DiscardOldestPolicy -- 當任務添加到線程池中被拒絕時,線程池會放棄等待隊列中最舊的未處理任務,然后將被拒絕的任務添加到等待隊列中。
  • DiscardPolicy -- 當任務添加到線程池中被拒絕時,線程池將丟棄被拒絕的任務。

預定義線程池4種線程池

ThreadPoolExecutor提供了四個構(gòu)造方法:


image
  • FixedThreadPool 固定大小的線程池
private final ExecutorService executorService = new ThreadPoolExecutor(10, 50,
        60L, TimeUnit.SECONDS,
        new LinkedBlockingQueue<Runnable>(), new ThreadFactoryBuilder()
        .build(), new ThreadPoolExecutor.AbortPolicy());

適用場景:可用于Web服務瞬時削峰,但需注意長時間持續(xù)高峰情況造成的隊列阻塞。

  • CachedThreadPool 可緩存線程池
   public static ExecutorService newCachedThreadPool() {
        return new ThreadPoolExecutor(0, Integer.MAX_VALUE,
                                      60L, TimeUnit.SECONDS,
                                      new SynchronousQueue<Runnable>());
    }

適用場景:快速處理大量耗時較短的任務,如Netty的NIO接受請求時,可使用CachedThreadPool。

  • SingleThreadExecutor 單例線程池
  public static ExecutorService newSingleThreadExecutor() {
        return new FinalizableDelegatedExecutorService
            (new ThreadPoolExecutor(1, 1,
                                    0L, TimeUnit.MILLISECONDS,
                                    new LinkedBlockingQueue<Runnable>()));
    }

適用場景:創(chuàng)建一個單線程的線程池,適用于需要保證順序執(zhí)行各個任務。

  • ScheduledThreadPool 調(diào)度線程池

內(nèi)容比較多 可自行度娘

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容