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?

War es hilfreich?

Lösung

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.");
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top