![](/img/trans.png)
[英]How to stop all running threads in ThreadPoolTaskExecutor?
[英]Stop work if all threads are idle
我有一些使用者線程,其中任何一個也可以充當生產者。 我怎么知道他們什么時候完成工作?
class Worker extends Thread{
void process(Task t){
...
if(needsMoreWork(t)){
queue.addAll(extractTasks(t));
}
}
public void run(){
while(isRunning){
Task t = queue.take();//I need to finish somehow.
process(t);
}
}
...
}
無需手動使用Thread
,而是將任務提交到ExecutorService
,並使用CountDownLatch
, CyclicBarrier
或Phaser
同步它們,具體取決於您是否需要多個工作周期以及每個周期中是否具有相同數量的任務組件。
根據您的process
具體組成的內容,可以考慮使用ForkJoinPool
。 它基本上總結了“對一堆項目執行相同的操作並收集結果”的想法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.