ScheduledThreadPoolExecutor scheduler = new ScheduledThreadPoolExecutor(1);
scheduler.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
System.out.println("A is running");
}
}, 10, 5, TimeUnit.SECONDS);
Thread.sleep(20000);
scheduler.shutdown();
if (scheduler.getCompletedTaskCount() > 0) {
System.out.println("A is done.");
}
Wie überprüft ein geplantexecutorservice?
-
29-07-2022 - |
Frage
Beschreibung
Eine Aufgabe A wird ausgeführt, die von 2s bis 60+dauern kann.
Während A läuft ein Ausführenderservice, der nach 10s (Verzögerung) alle 5s "ausgeführt" würde (feste Rate).
ScheduledExecutorService scheduleNotifications = Executors
.newSingleThreadScheduledExecutor();
scheduleNotifications.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
System.out.println("A is running");
}
}, 10, 5, TimeUnit.SECONDS);
Sobald A fertig ist, möchte ich "A ist fertig" drucken. Aber nur wenn meine ScheduleDexecutorService -Aufgabe begonnen hat, was bedeutet, dass es mindestens einmal "ausgeführt" gedruckt wurde.
- Wenn ein vor 10s fertig ist, drucke ich nichts aus.
- Wenn ein mehr als 10 Sekunden dauert, drucke ich alle 5 und dann "fertig", sobald A fertig ist.
Wie könnte ich das tun, ohne eine boolesche Flagge im Schduled zu verwenden? runnable
. Gibt es eine Möglichkeit, zu überprüfen, ob mein Dienst begonnen hat?
Lösung
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow