簡體   English   中英

如果所有線程都空閑,則停止工作

[英]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 ,並使用CountDownLatchCyclicBarrierPhaser同步它們,具體取決於您是否需要多個工作周期以及每個周期中是否具有相同數量的任務組件。

根據您的process具體組成的內容,可以考慮使用ForkJoinPool 它基本上總結了“對一堆項目執行相同的操作並收集結果”的想法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM