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é?

Était-ce utile?

La solution

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.");
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top