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.");
}
In che modo è avviato una verifica di un ExecutorService pianificato?
-
29-07-2022 - |
Domanda
Descrizione
Un compito A è in esecuzione, che può durare da 2 a 60+s.
Mentre A è in esecuzione, ho programmato un servizio esecutivo che dopo 10s (ritardo) stamperei "in esecuzione" ogni 5S (tariffa fissa).
ScheduledExecutorService scheduleNotifications = Executors
.newSingleThreadScheduledExecutor();
scheduleNotifications.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
System.out.println("A is running");
}
}, 10, 5, TimeUnit.SECONDS);
Una volta che A è finito, desidero stampare "A è fatto". Ma solo se è avviata la mia attività programmata, nel senso che ha stampato "in esecuzione" almeno una volta.
- Se un finito prima dei 10 anni, non stampino nulla.
- Se A richiede più di 10 secondi, stampano "correndo" ogni 5s e poi "fatto" una volta che è finito.
Come potrei farlo senza usare una bandiera booleana all'interno dello schduled runnable
. C'è un modo per verificare che il mio servizio sia iniziato?
Soluzione
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow