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.");
}
Comment vérifier un ScheduleDexecutorService a commencé?
-
29-07-2022 - |
Question
La description
Une tâche A est en cours d'exécution, qui peut durer de 2s à 60 + s.
Pendant que A est en cours d'exécution, j'ai programmé un exécuteur exécutif qu'après 10s (retard), imprimerais "exécuter" tous les 5 s (taux fixe).
ScheduledExecutorService scheduleNotifications = Executors
.newSingleThreadScheduledExecutor();
scheduleNotifications.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
System.out.println("A is running");
}
}, 10, 5, TimeUnit.SECONDS);
Une fois A terminé, je souhaite imprimer "A est terminé". Mais seulement si ma tâche de divulgation planifiée a commencé, ce qui signifie qu'il a imprimé "courir" au moins une fois.
- Si un fini avant 10 s, je n'imprime rien.
- Si A prend plus de 10s, j'imprime "en cours d'exécution" tous les 5, puis "fait" une fois terminé.
Comment puis-je faire ça sans utiliser de drapeau booléen à l'intérieur du schduled runnable
. Existe-t-il un moyen de vérifier que mon service a commencé?
La solution
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow