java.util.concurrent——線程池

1.線程池優點:


第一:降低資源消耗.通過重複利用自己創建的線程降低線程創建和銷燬造成的消耗.
第二: 提高響應速度.當任務到達時,任務可以不需要等到線程和粗昂就愛你就能立即執行.
第三: 提高線程的可管理性.線程是稀缺資源,如果無限的創阿金,不僅會消耗資源,還會較低系統的穩定性,使用線程池可以進行統一分配,調優和監控.

2.線程池的常見類別

newSingleThreadExecutor:一個單線程的線程池,可以用於需要保證順序執行的場景,並且只有一個線程在執行。

newFixedThreadPool:一個固定大小的線程池,可以用於已知併發壓力的情況下,對線程數做限制。

newCachedThreadPool:一個可以無限擴大的線程池,比較適合處理執行時間比較小的任務。

newScheduledThreadPool:可以延時啓動,定時啓動的線程池,適用於需要多個後臺線程執行週期任務的場景。

newWorkStealingPool:一個擁有多個任務隊列的線程池,可以減少連接數,創建當前可用cpu數量的線程來並行執行。

2.1 應用場景

1.需要大量的線程來完成任務,且完成任務的時間較短。例如Web服務器完成網頁請求,因爲單個任務小且任務量非常的巨大,非常適合線程池技術。可以想一下火爆網站的瞬間訪問量。誠然,服務器的處理速度是非常重要的,但是線程池的技術也是重中之重。但是時間較長的任務請求線程池的優點就不明顯了。因爲這種操作花費的時間和線程的創建銷燬時間相比多了很多。

2.對性能要求苛刻的應用,比如要求服務器迅速響應客戶請求。

3.接受突發性的大量請求,但不至於使服務器因此產生大量線程的應用。突發性大量客戶請求,在沒有線程池情況下,將產生大量線程,雖然理論上大部分操作系統線程數目最大值不是問題,短時間內產生大量線程可能使內存到達極限,並出現"OutOfMemory"的錯誤。
 


3.線程池七大參數

 

3.1 線程池的拒絕策略

面試中的超級大坑,注意!!!

問:你在工作中用過什麼線程池?

答:一個也沒用過,我們的線程池是自己寫的!!當然這個一般都是公司架構師的事,我們只要知道不用直接使用JDK推薦的,尤其在多線程環境中。

ExecutorService threadPool = new ThreadPoolExecutor(七大參數)

3.2 最大線程數的配置

這裏根據業務的情況,分爲兩種配置。

1.CPU密集型:maximumPoolSize=CPU核數+1

2.IO密集型:maximumPoolSize=CPU核數*2

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章