So prüfen Sie, ob alle auf ExecutorService ausgeführten Aufgaben abgeschlossen sind

Ich habe ConcurrentLinkedDeque, das ich für synchrone Push / Pop-Elemente verwende, und ich habe einige asynchrone Tasks, die ein Element aus dem Stapel nehmen, und wenn dieses Element Nachbarn hat, wird es in den Stapel geschoben.

Beispielcode:

private ConcurrentLinkedDeque<Item> stack = new ConcurrentLinkedDeque<>();
private ExecutorService exec = Executors.newFixedThreadPool(5);

    while ((item = stack.pollFirst()) != null) {
                if (item == null) {
                } else {
                    Runnable worker = new Solider(this, item);
                    exec.execute(worker);
                }
            }

   class Solider{
         public void run(){
             if(item.hasNeighbors){
                for(Item item:item.neighbors){
                    stack.push(item)
                }
             } 
         }
    }

Ich hätte gerne eine zusätzliche Anweisung in der while-Schleife, die die Frage beantwortet: "Funktioniert eine Aufgabe in Executor?"

Antworten auf die Frage(2)

Ihre Antwort auf die Frage