通過手寫線程池,理解了以下問題:
1.當任務堆滿阻塞隊列後,線程池會new新的線程來處理新的任務,直到線程數量達到最大值。這些新new出來的線程什麼時候銷燬呢?
答:new出新線程後,這些線程同核心線程一樣,處理阻塞隊列裏面的任務,阻塞隊列裏面任務處理完了後,新new出來的線程在等待設置的時間後,進行銷燬,核心線程繼續存活。
2.比核心線程池數多的線程如何實現等待設置的時間後就銷燬呢?
答案是:
當執行workQueue.take()方法時,如果隊列中無任務,則線程會被阻塞在這裏,直到有任務時,纔會繼續執行。
當執行workQueue.poll()方法時,如果隊列中無任務,則會在等待對應保活時間過,返回null,返回 null 之後在上文的 run() 中就會退出這個線程,從而達到了回收線程的目的。
手動實現線程池
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章
Happens-Before原則
H阿布
2020-07-08 11:03:32
volatile關鍵字的作用及使用場景
H阿布
2020-07-08 11:03:21
6.4 ThreadPoolExecutor線程池的關閉方法shutdown和shutdownNow區別、示例
一点光辉
2020-07-08 10:46:31
爲什麼java線程不推薦調用stop,suspend,resume方法
https://my.oschina.net/u/1047640/blog/506901
BaldWinf
2020-07-08 08:59:06
併發編程(一)之線程的創建和啓動
易水墨龙吟
2020-07-08 06:13:18
Java知識點——線程通信(線程之間的聯繫)
青柠小鱼码字猴
2020-07-08 03:45:43
Java多線程及線程池學習
帥樂
2020-07-08 03:27:17
Atomic原子類-1
yan-x-long
2020-07-08 03:14:08
【併發容器精講二、】CopyOnWriteArrayList
yan-x-long
2020-07-08 03:14:08
【併發容器精講一、】ConcurrentHashMap
yan-x-long
2020-07-08 03:14:08
Java架構師Day28-併發編程之線程池
攻城狮Chova
2020-07-08 01:44:49
java stop方法爲什麼不能用?
imagine0623
2020-07-08 01:18:27
CopyOnWriteArrayList和ReentrantReadWriteLock
lovesman
2020-07-08 00:13:54
volatile很難?由淺入深懟到CPU彙編,徹底搞清楚它的底層原理
我不是臭弟弟
2020-07-07 16:44:11