Java線程池

線程池核心參數

有7個核心參數

  1. 核心線程數
  2. 最大線程數
  3. 任務隊列
  4. 線程空閑存活時間
  5. 線程空閑存活時間的單位
  6. 線程創建工廠
  7. 拒絕策略

任務提交流程

往線程池中提交任務流程如下:

  1. 判斷線程池中線程數是否小于核心線程數,小于新建線程執行任務,否則進入步驟2
  2. 判斷任務隊列是否滿了,沒滿任務添加到隊列中,否則進入步驟3
  3. 判斷線程池中線程是是否小于最大線程數,小于新建線程執行任務,否則按照拒絕策略拒絕任務


    任務提交流程

線程池狀態

線程池有5種狀態:

  • running(運行):新建線程池后的狀態為running
  • shutdown(關閉):調用shutdown方法后,不接受新的任務,工作的線程繼續執行,把隊列中的任務執行完成,變成tidying
  • stop(停止):調用shutdownnow方法后,不在接受新的任務,中斷正在工作的線程,隊列中的任務不執行,變成tidying
  • tidying(整理)
  • terminated(終止):變成tidying狀態之后,內部調用terminated方法


    狀態流轉

拒絕策略

有4種:

  1. 直接丟棄
  2. 直接拒絕,拋異常
  3. 交給應用線程執行
  4. 丟棄隊列中最早的任務,然后重新提交

線程池的數量怎么確定

看場景是cpu密集型還是io密集型

  • cpu密集型:cpu核數
  • io密集型:2倍cpu核數
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容