Ausgabe
Ich arbeite an einer Desktop-Anwendung, die immer wieder denselben Prozess durchführt … mit anderen Worten, sie läuft den ganzen Tag immer wieder.
Ich erfülle diese Aufgabe scheduleWithFixedDelay
wie folgt.
private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
final ScheduledFuture<?> threadHandle = scheduler.scheduleWithFixedDelay(mainThread, 0, 5, TimeUnit.SECONDS);
Immer wenn jemand auf die Schließen-Schaltfläche klickt, möchte ich das Programm nur schließen, wenn die Aufgabe für eine bestimmte Runde abgeschlossen ist oder wenn es ideal ist.
Ich habe dies mit 2 boolean
Variablen gemacht (eine, um zu überprüfen, ob der Benutzer auf die Schaltfläche „Schließen“ geklickt hat, und die andere, um zu überprüfen, ob der Prozess ausgeführt wird.) Aber diese Methode war nicht effizient.
Gibt es eine effiziente Möglichkeit, diese Aufgabe zu erledigen, z. B. die Verwendung integrierter Funktionen.
Vielen Dank im Voraus 🙂
Lösung
Bevor Sie Ihre Anwendung beenden, führen Sie sie aus, scheduler.shutdown()
gefolgt von scheduler.awaitTermination(...timeout...)
( weiterlesen ). Die spätere Methode wird tun, was Sie wollen: Wenn keine Aufgabe ausgeführt wird, kehrt sie sofort zurück, und wenn die Aufgabe in Bearbeitung ist, wird sie blockiert, bis die Aufgabe beendet ist (oder das Timeout abgelaufen ist).
Beantwortet von – Aivean
Antwort geprüft von – Willingham (FixError Volunteer)