執行緒池ThreadPoolEXecutor

2021-07-04 07:44:32 字數 945 閱讀 9643

執行緒池能降低資源消耗、提高響應速度、提高執行緒的可管理性

1)執行緒池的建立

可以通過threadpoolexecutor來建立乙個執行緒池,建立乙個執行緒池需要輸入幾個引數:corepoolsize(執行緒池的基本大小),runnabletaskqueue(任務佇列),maximumpoolsize(執行緒池最大大小),rejectedexecutionhandler(飽和策略),keepalivetime(執行緒活動保持時間),timeunit(執行緒活動保持時間的單位)

2)向執行緒池提交任務

我們可以使用execute提交的任務,但是execute方法沒有返回值,所以無法判斷任務是否被執行緒池執行成功;

我們也可以使用submit 方法來提交任務,它會返回乙個future物件,那麼我們可以通過這個future物件來判斷任務是否執行成功,通過future的get方法來獲取返回值,get方法會阻塞住直到任務完成,而使用get(long timeout, timeunit unit)方法則會阻塞一段時間後立即返回,這時有可能任務沒有執行完。

3)執行緒池的關閉

我們可以通過呼叫執行緒池的shutdown或shutdownnow方法來關閉執行緒池,它們的原理是遍歷執行緒池中的工作執行緒,然後逐個呼叫執行緒的interrupt方法來中斷執行緒,所以無法響應中斷的任務可能永遠無法終止。但是它們存在一定的區別,shutdownnow首先將執行緒池的狀態設定成stop,然後嘗試停止所有的正在執行或暫停任務的執行緒,並返回等待執行任務的列表,而shutdown只是將執行緒池的狀態設定成shutdown狀態,然後中斷所有沒有正在執行任務的執行緒。

1)首先執行緒池判斷基本執行緒池是否已滿?沒滿,建立乙個工作執行緒來執行任務。滿了,則進入下個流程。

2)其次執行緒池判斷工作佇列是否已滿?沒滿,則將新提交的任務儲存在工作佇列裡。滿了,則進入下個流程。

3)最後執行緒池判斷整個執行緒池是否已滿?沒滿,則建立乙個新的工作執行緒來執行任務,滿了,則交給飽和策略來處理這個任務。

執行緒 執行緒池

執行緒池是一種多執行緒處理形式,處理過程中將任務新增到佇列,然後在建立執行緒後執行,主要實現 建立執行緒和管理執行緒,並且給執行緒分配任務。執行緒池中的執行緒是併發執行的。乙個比較簡單的執行緒池至少應包含執行緒池管理器 工作執行緒 任務列隊 任務介面等部分。其中執行緒池管理器的作用是建立 銷毀並管理...

執行緒 執行緒池

乙個簡單執行緒的建立和銷毀如下 與程序程序相比,執行緒是一種輕量級的工具,但是輕量並不代表沒有,它的建立和關閉依然需要花費時間,如果建立和銷毀的時間還大於執行緒本身完成的工作,那就會得不償失,甚至會造成out of memory。即使沒有,大量的執行緒 也會給gc帶來巨大的壓力。為了解決這樣的問題,...

mysql 執行緒池 c MySQL執行緒池

mysql執行緒池 在麼mysql中,執行緒池指的是用來管理處理mysql客戶端連線任務的執行緒的一種機制。如果把執行緒看做系統資源那麼執行緒池本質上是對系統資源的管理,對應作業系統來說執行緒的建立和銷毀是比較消耗系統資源的,頻繁的建立與銷毀執行緒必然給系統帶來不必要的資源浪費,特別是在高負載的情況...