我正在運行的服務器應用程序獲取多個請求,這些請求是我想要使用任務系統處理的任務。Executor:等待特定任務完成
每個任務都表示爲Runnable
,這將要求n
線程池中的線程數量,其中n
小於或等於線程池大小。線程池當然是必要的,以便而不是過多的CPU線程太多。
但是,其中一些任務可以是多線程的,有些則不能。這就是爲什麼一個任務可能需要等待所有特定線程完成以便合併來自這些線程的結果以獲得最終結果。
如果一個使用多個Thread
情況下,人們可能會加入那些像這樣:
try {
// Wait for all threads to finish their tasks
for (Thread thread : threads) {
thread.join();
}
} catch (InterruptedException e) {
e.printStackTrace();
}
// Finish job here ..
,但我需要像這樣使用類似java.util.concurrent.Executor
或任何一個線程池的作品。
我可能是錯在這裏,但感覺就像你使用上的抽象水平錯誤執行人。如果你有一個需要* n *個線程運行的任務,我建議你讓這個任務創建它自己的線程池,或者把它分解成更小的1線程任務。 – aioobe
@aioobe你可能會遇到太多效率不高的執行者/池 – bachr
在開始工作之前,可以讓每個任務都做一些SharedSemaphore.acquire(n)。 – aioobe