ScheduledExecutorService avec délai variable

Supposons que j'ai une tâche qui est en tirant des éléments de java.util.de façon concomitante.BlockingQueue et leur traitement.

public void scheduleTask(int delay, TimeUnit timeUnit)
{
    scheduledExecutorService.scheduleWithFixedDelay(new Task(queue), 0, delay, timeUnit);
}

Comment puis-je programmer /reprogrammer la tâche si la fréquence peut être modifiée dynamiquement?

  • L'idée est de prendre un flux de mises à jour de données et de les propager dans le lot d'une interface graphique
  • L'utilisateur doit être capable de faire varier la fréquence des mises à jour
il n'est pas clair pour moi pourquoi vous êtes en utilisant une file d'attente de blocage. si youe la file d'attente est vide. Je suppose que votre tâche planifiée sera bloqué. est que votre intention? ce sera probablement confondre le planificateur de tâches de synchronisation.
J'ai choisi le ArrayBlockingQueue de la mise en œuvre doit être thread-safe, le respect de la FIFO de commande et d'être borné. Même si le groupe de blocs, il ne faut pas confondre l'ordonnancement des tâches devrait-il?
Vous avez raison de l'utilisation d'un BlockingQueue de mise en œuvre (en fait ScheduledThreadPoolExecutor utilise en interne). Cependant, pourquoi êtes-vous de multiplication de vos mises à jour de l'interface graphique à l'aide d'une minuterie à tous? Pourquoi ne pas le faire en temps réel? Sont-elles trop nombreuses mises à jour? Êtes-vous préoccupé par le Swing fil filature?
Je veux le lot de mises à jour. Donc, en interne, les événements peuvent arriver tous les ms, mais l'interface graphique s'actualisent toutes les 100ms. Je pense que ce sera plus attrayante visuellement et ont moins de ressources de processeur. J'utilise Eclipse RCP au lieu de Balancer.
Plus tard, en double: Comment puis-je modifier le taux ou la durée de la répétition d'une tâche à l'aide de ScheduledExecutorService?

OriginalL'auteur parkr | 2009-10-05