線程池為甚么要用阻塞隊列


線程池為甚么要用阻塞隊列

  1. 一般隊列只能保證作為一個有線長度的緩沖區,如果超過了緩沖區長度,就無法保留當前任務了,阻塞隊列通過阻塞可以保留當前想要繼續入隊的任務,阻塞隊列可以保證任務隊列中沒有任務時阻塞隊列獲取任務的線程(即線程池中沒有任務時,阻塞核心線程),使得線程進入wait狀態,釋放cpu
  2. 線程創建的時候,需要獲取全局鎖,這個時候其他的線程就需要阻塞,影響整體性能。

 

阻塞隊列主要是:有限的隊列長度,隊列滿了,可以阻塞保留當前任務;隊列為空,阻塞線程,保持核心線程不退出。

線程池如何超時:queue.poll(timeOut),當線程在過期時間內沒有從隊列中拉到任務,就會把當前線程標記為過期,下次循環直接回收,就是gettask任務返回null,主線程run方法退出while循環,執行結束,線程被jvm回收。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM