線程池
一.在什么情況下使用線程池 :1.單個任務處理的時間比較短 2.需處理的任務的數量大
二.線程池就像是一把雙刃劍,有利也有弊
使用線程池的好處:
1.減少在創建和銷毀線程上所花的時間以及系統資源的開銷
2.如不使用線程池,有可能造成系統創建大量線程而導致消耗完系統內存以及”過度切換”。
使用線程池的弊端:
1. 用線程池構建的應用程序容易遭受任何其它多線程應用程序容易遭受的所有并發風險,諸如同步錯誤和死鎖,它還容易遭受特定于線程池死鎖、資源不足和線程泄漏并發錯誤,線程池和其它排隊機制依靠使用 wait() 和 notify() 方法,這兩個方法都難于使用。
2.如果編碼不正確,那么可能丟失通知,導致線程保持空閑狀態,盡管隊列中有工作要處理。
三. 線程池的分類及意義:
1.創建一個可緩存線程池,如果線程池長度超過處理需要,可靈活回收空閑線程,如果無可回收,則新建線程
2.創建一個指定工作線程數量的線程池。每當提交一個任務就創建一個工作線程,如果工作線程數量達到線程池初始的最大數,則將提交的任務存入到池隊列中。
3.創建一個單線程化的Executor,即只創建唯一的工作者線程來執行任務,它只會用唯一的工作線程來執行任務,保證所有任務按照指定順序(FIFO, LIFO, 優先級)執行
4.創建一個定長的線程池,而且支持定時的以及周期性的任務執行,支持定時及周期性任務執行
浙公網安備 33010602011771號