手動實現線程池

通過手寫線程池,理解了以下問題:
1.當任務堆滿阻塞隊列後,線程池會new新的線程來處理新的任務,直到線程數量達到最大值。這些新new出來的線程什麼時候銷燬呢?
答:new出新線程後,這些線程同核心線程一樣,處理阻塞隊列裏面的任務,阻塞隊列裏面任務處理完了後,新new出來的線程在等待設置的時間後,進行銷燬,核心線程繼續存活。
2.比核心線程池數多的線程如何實現等待設置的時間後就銷燬呢?
答案是:
在這裏插入圖片描述
當執行workQueue.take()方法時,如果隊列中無任務,則線程會被阻塞在這裏,直到有任務時,纔會繼續執行。
當執行workQueue.poll()方法時,如果隊列中無任務,則會在等待對應保活時間過,返回null,返回 null 之後在上文的 run() 中就會退出這個線程,從而達到了回收線程的目的。

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