如果所有线程都空闲,则停止工作

gue*_*418 0 java multithreading

我有一些消费者线程,其中任何一个也可以充当生产者.我怎么知道他们什么时候完成了他们的工作?

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);
        }
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

chr*_*ke- 5

而不是使用Thread手动S,提交你的任务的ExecutorService,并使用一个CountDownLatch,CyclicBarrierPhaser给他们,同步取决于你是否需要你的工作的多个周期以及是否有相同数量的每个循环任务组件.

根据您的具体process情况,ForkJoinPool可能需要考虑; 它基本上包含了"对一堆物品执行相同操作并收集结果"的想法.