J'ai une file d'attente d'événements à traiter. Un thread ajoute des événements à la file d'attente.
J'ai créé une tâche exécutable qui dans la méthode run
fait tout ce qui est nécessaire pour traiter l'événement.
J'ai déclaré Executors.newCachedThreadPool();
et I execute
chaque tâche.Traitement séquentiel des événements via executorservice
public class EventHandler {
private static final ExecutorService handlers = Executors.newCachedThreadPool();
public void handleNextEvent(AnEvent event){
handlers.execute(new Task(evt));
}
public class Task implements Runnable{
@Override
public void run() {
//Event processing
}
}
public AnotherClass{
public void passEvent(AnEvent evt)//This is called by another thread
{
EventHandler.handleNextEvent(evt);
}
}
Mon problème est que si je l'appelle execute
de l'exécuteur testamentaire, mon code obtiendra le prochain événement et exécuter suivant runnable par l'exécuteur testamentaire. Mon but est de traiter l'événement suivant de la file d'attente seulement après la fin de la tâche précédente.
Comment saurais-je que la tâche précédente est terminée ou non pour que je sache que je peux encore appeler handleNextEvent?
La mise à jour d'un champ de statut par la tâche est-elle une bonne idée?
Merci
Voulez-vous les événements traiter un après l'autre? –
@ckuetbach: Oui, dans l'ordre où ils entrent. – Cratylus