Ausführende: Wie kann synchron gewartet werden, bis alle Aufgaben abgeschlossen sind, wenn Aufgaben rekursiv erstellt werden?

Meine Frage ist stark verwandt mitdieses hier. Wie dort gepostet, möchte ich, dass der Haupt-Thread wartet, bis die Arbeitswarteschlange leer ist und alle Aufgaben beendet sind. Das Problem in meiner Situation ist jedoch, dass jede Aufgabe möglicherweise rekursiv dazu führt, dass neue Aufgaben zur Verarbeitung übergeben werden. Dies macht es ein wenig umständlich, alle Zukünfte dieser Aufgaben zu sammeln.

Unsere aktuelle Lösung verwendet eine Besetzt-Warteschleife, um die Beendigung abzuwarten:

        do { //Wait until we are done the processing
      try {
        Thread.sleep(200);
      } catch (InterruptedException e) {
        throw new RuntimeException(e);
      }
    } while (!executor.getQueue().isEmpty()
             || numTasks.longValue() > executor.getCompletedTaskCount());

numTasks ist ein Wert, der bei jeder neuen Aufgabe erhöht wird. Dies funktioniert, aber ich denke, es ist nicht sehr schön, da viel gewartet wird. Ich habe mich gefragt, ob es eine gute Möglichkeit gibt, den Haupt-Thread synchron warten zu lassen, bis er explizit aufgeweckt wird.

Antworten auf die Frage(9)

Ihre Antwort auf die Frage