У меня есть очередь событий для обработки. Поток добавляет события в очередь.
Я создал выполняемую задачу, которая в методе run
делает все необходимое для обработки события.
Я объявил Executors.newCachedThreadPool();
и я execute
каждая задача.
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);
}
}
Моя проблема в том, что если я вызову execute
исполнителя, мой код получит следующее событие и выполнит следующий запускаемый через исполнителя.
Моя цель - обработать следующее событие из очереди только после завершения предыдущего задания.
Откуда мне знать, что предыдущая задача завершена или нет, чтобы я знал, что могу снова вызвать handleNextEvent?
Является ли наличие какого-либо поля состояния, обновленного Задачей, хорошей идеей?
Спасибо