2012-10-17 4 views
6

J'ai un singleThreadExecutor que je suis une alimentation Runnable avec un scheduledFixedDelay comme celui-ciPuis-je forcer une exécution supplémentaire d'une exécution planifiée?

Runnable periodic = new Runnable() { ... } 

ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor(); 
executor.scheduleWithFixedDelay(periodic, 1, 1, TimeUnit.MINUTES); 

Il fonctionnera avec 1 minute d'attente entre les exécutions. Le problème est, parfois j'ai besoin de le faire "à la demande". Est-ce possible? J'ai pensé à annuler l'exécution, exécuter le Runnable et redémarrer l'exécution mais ce que je voudrais vraiment, c'est une méthode simple qui exécute simplement Runnable une heure et la replie pour la réexécuter en une minute.

Répondre

4

Lorsque vous voulez que la tâche à exécuter, vous pouvez le soumettre

executor.submit(periodic); 

ou l'ajouter avec un retard

executor.schedule(periodic, delay, units); 
+0

Mais si l'exécuteur testamentaire déjà avoir ce Runnable soit l'exécution ou prévu ce qui se passera alors ? –

+0

Il serait exécuté les deux fois où vous lui avez demandé de courir. –

+2

Bien que pas exactement ce que je voulais, j'ai approuvé cette réponse. Je voudrais vraiment qu'il fasse maintenant l'exécution de * plan * au lieu de quand il a été planifié mais il travaille également à ajouter le périodique comme un nouveau travail ponctuel car j'utilise un singleThreadScheduledExecutor. –

Questions connexes