我使用的核心池大小為 3,佇列大小為 50,最大池大小為 500。
假設核心池和佇列有如下執行緒
core pool = [A, B, C]
queue = [D, E, F]
只有在核心池中的一個執行緒完成執行后,執行緒 D 才會執行?要么
一個正在運行的執行緒可以說核心池中的 B 進入等待狀態并且執行緒 D 被拉入核心池嗎?
uj5u.com熱心網友回復:
A、B 或 C 任務之一必須在池可以開始另一個任務之前完成。每個任務都會運行到完成或直到被取消,進入等待狀態不會釋放作業執行緒。
這是 ThreadPoolExecutor 的 openjdk 代碼:http: //hg.openjdk.java.net/jdk8/jdk8/jdk/file/687fd7c7986d/src/share/classes/java/util/concurrent/ThreadPoolExecutor.java。有一個 runWorker 方法可以獲取下一個任務并在其上呼叫 run(第 1141 行)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/457405.html
上一篇:如何使用QtConcurrrentQt6運行成員函式?型別'decay_t不能在'::'之前使用,因為它沒有成員)
