執行緒池如何保證核心執行緒不被銷毀

2021-10-22 06:27:11 字數 715 閱讀 8077

// 執行緒迴圈獲取佇列中的任務

private runnable gettask()

int wc =

workercountof

(c);

// are workers subject to culling?

boolean timed = allowcorethreadtimeout || wc > corepoolsize;if(

(wc > maximumpoolsize ||

(timed && timedout))&&

(wc >

1|| workqueue.

isempty()

))// 重點

這段**是關鍵,當前執行緒是核心執行緒時,呼叫的是take()方法,該方法是阻塞的,從而確保核心執行緒不會被銷毀!

那如果我們要想核心執行緒也能被銷毀怎麼辦?呼叫執行緒池物件的allowcorethreadtimeout(true)方法;而且建立執行緒池的時候必須指定存活時間,原因如下圖:

執行緒池 如何保證核心執行緒不被銷毀的

問題 1.執行緒池是怎麼保證他的核心執行緒不釋放 而一直等待任務的執行的呢?2.我們一直理解的執行緒run方法執行完畢執行緒就銷毀是不正確的?3.還有我們為何通過設定allowcorethreadtimeout true 就能使核心執行緒銷毀的呢?答案 1.執行緒阻塞 2.和那個關係不大 3.可以的...

如何保證執行緒安全有序性 執行緒池如何保證有序?

在生產環境中,用kafka來解耦是常用的技術手段。為了保證訊息的順序處理,會把相同屬性 同乙個人 同乙個素材等 的訊息發往kafka同乙個partition中。例如,在廣告系統中,會把某乙個ad的轉化資料傳送到同乙個partition。ad1 ad1 msg1,ad1 msg2,順序發到partit...

如何保證執行緒安全有序性 執行緒池如何保證有序?

背景 在生產環境中,用kafka來解耦是常用的技術手段。為了保證訊息的順序處理,會把相同屬性 同乙個人 同乙個素材等 的訊息發往kafka同乙個partition中。例如,在廣告系統中,會把某乙個ad的轉化資料傳送到同乙個partition。ad1 ad1 msg1,ad1 msg2,順序發到par...