国产一区二区精品-国产一区二区精品久-国产一区二区精品久久-国产一区二区精品久久91-免费毛片播放-免费毛片基地

千鋒教育-做有情懷、有良心、有品質的職業教育機構

手機站
千鋒教育

千鋒學習站 | 隨時隨地免費學

千鋒教育

掃一掃進入千鋒手機站

領取全套視頻
千鋒教育

關注千鋒學習站小程序
隨時隨地免費學習課程

當前位置:首頁  >  技術干貨  > ThreadPoolExecutor可以創建哪是哪三種線程池呢

ThreadPoolExecutor可以創建哪是哪三種線程池呢

來源:千鋒教育
發布人:syq
時間: 2022-09-09 15:29:35 1662708575

  newFixedThreadPool

2

  線程池的線程數量達corePoolSize后,即使線程池沒有可執行任務時,也不會釋放線程。

  FixedThreadPool的工作隊列為無界隊列LinkedBlockingQueue(隊列容量為Integer.MAX_VALUE), 這會導致以下問題:

  線程池里的線程數量不超過corePoolSize,這導致了maximumPoolSize和keepAliveTime將會是個無用參數 由于使用了無界隊列, 所以FixedThreadPool永遠不會拒絕,即飽和策略失效。

  newSingleThreadExecutor

3


  初始化的線程池中只有一個線程,如果該線程異常結束,會重新創建一個新的線程繼續執行任務,唯一的線程可以保證所提交任務的順序執行。

  由于使用了無界隊列,所以SingleThreadPool永遠不會拒絕, 即飽和策略失效

  newCachedThreadPool

4

  線程池的線程數可達到Integer.MAX_VALUE,即2147483647,內部使用SynchronousQueue作為阻塞隊列;

  和newFixedThreadPool創建的線程池不同,newCachedThreadPool在沒有任務執行時,當線程的空閑時間超過keepAliveTime,會自動釋放線程資源,當提交新任務時,如果沒有空閑線程,則創建新線程執行任務,會導致一定的系統開銷;執行過程與前兩種稍微不同:

  主線程調用SynchronousQueue的offer()方法放入task, 倘若此時線程池中有空閑的線程嘗試讀取 SynchronousQueue的task,即調用了SynchronousQueue的poll(), 那么主線程將該task交給空閑線程. 否則執行(2) 當線程池為空或者沒有空閑的線程, 則創建新的線程執行任務。執行完任務的線程倘若在60s內仍空閑, 則會被終止。因此長時間空閑的CachedThreadPool不會持有任何線程資源。

tags:
聲明:本站稿件版權均屬千鋒教育所有,未經許可不得擅自轉載。
10年以上業內強師集結,手把手帶你蛻變精英
請您保持通訊暢通,專屬學習老師24小時內將與您1V1溝通
免費領取
今日已有369人領取成功
劉同學 138****2860 剛剛成功領取
王同學 131****2015 剛剛成功領取
張同學 133****4652 剛剛成功領取
李同學 135****8607 剛剛成功領取
楊同學 132****5667 剛剛成功領取
岳同學 134****6652 剛剛成功領取
梁同學 157****2950 剛剛成功領取
劉同學 189****1015 剛剛成功領取
張同學 155****4678 剛剛成功領取
鄒同學 139****2907 剛剛成功領取
董同學 138****2867 剛剛成功領取
周同學 136****3602 剛剛成功領取
相關推薦HOT