2010-01-05 4 views
4

Je souhaite créer un arrière-plan Thread manipulant certaines tâches (Runnable) et les exécutant dans l'ordre dans lequel elles sont affichées.Event thread in java

Important: ces tâches ne doivent PAS être exécutées sur le thread Dispatcher d'événements.

Quelque chose comme:

BackgroundEventThread backgroundEventThread = new BackgroundEventThread(); 

puis, plus tard, et dans de nombreux endroits dans le code:

Runnable thingToDo = new Runnable(){...}; 

backgroundEventThread.executeThis(thingToDo); 
//the things to do will be executed in the order in which they are posted. 

La classe BackgroundEventThread devrait être assez simple à coder, mais je me demandais si un tel classe existait déjà dans un endroit inconnu à moi dans le JDK ou dans une bibliothèque commune ...

EDIT: Oui ne sait pas à l'avance le nombre de tâches à exécuter sur ce fil.

je pouvais avoir:

  • task0 (très court) passe à t0
  • Task1 (de temps à traiter ...) passe à T0 + 1s
  • task2 (courte) passe à t0 + 5 s, etc.
  • TASK3 (etc, etc ...)

Et je dois task2 (que je ne sais pas à l'avance) à exécuter après Task1, un d Je veux que toutes ces tâches soient exécutées dès que possible.

Exactement comme des tâches postées sur l'EDT, mais pas sur l'EDT.

Répondre

4

Cela ressemble à un travail pour java.util.concurrent.ThreadPoolExecutor.

Vous pouvez configurer cela avec un "pool" d'un thread unique, puis lancer des tâches à exécuter pour vous.

+2

btw, SwingWorker utilise exactement ThreadPoolExecutor en interne. Seulement, il a une constante définissant les threads max. – Bozho

2

Vérifier SwingWorker

Une classe abstraite pour effectuer de longues tâches dans l'interaction GUI un thread dédié.

Tous les détails nécessaires à son utilisation se trouvent dans javadoc.

+1

Est-ce que SwingWorker garantit l'exécution? –

+0

Ce n'est pas exactement ce que je cherche: - Je n'ai pas besoin d'interaction avec l'EDT - Mes tâches sont courtes, et il y en a beaucoup qui peuvent être créées à tout moment. Donc, j'aurais besoin de beaucoup de travailleurs swing, et je ne peux pas être sûr que tous partageront le même fil conducteur. –

+0

c'est asynchrone, donc pas d'ordre d'exécution (si je reçois votre question correctement). Si vous voulez effectuer deux opérations ultérieures en arrière-plan, utilisez un assistant de basculement avec deux classes d'assistance qui exécutent chacune des tâches séquentielles. En outre, je pense que vous pouvez contrôler le nombre de threads asynchrones via ThreadPoolExecutor – Bozho

2

Il devrait être possible de configurer un ExecutorService pour faire exactement ce dont vous avez besoin.