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?"