[FIXED] Schließen eines Programms, das scheduleWithFixedDelay verwendet

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 scheduleWithFixedDelaywie 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 booleanVariablen 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)

0 Shares:
Leave a Reply

Your email address will not be published. Required fields are marked *

You May Also Like