通过executorservice进行顺序事件处理

Cra*_*lus 0 java queue multithreading event-handling executorservice

我有一个要处理的事件队列.线程将事件添加到队列中.
我创建了一个可运行的Task,在该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);

    }
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,如果我调用execute执行程序,我的代码将获得下一个事件并通过执行程序运行下一个runnable.我的目的是仅在上一个任务结束后才从队列中处理下一个事件.
我怎么知道前一个任务已经完成,所以我知道我可以再次调用handleNextEvent?
是否有一个状态字段由任务更新一个好主意?

谢谢

ska*_*man 6

Executors.newCachedThreadPool()将按需创建新线程,因此它不是您想要的.你需要类似的东西Executors.newSingleThreadExecutor(),它将一次处理一个事件,并排队其余的事件.

javadoc:

创建一个Executor,它使用一个在无界队列中运行的工作线程.(但请注意,如果此单个线程由于在关闭之前执行期间的故障而终止,则在需要执行后续任务时将使用新的线程.)保证任务按顺序执行,并且不会有多个任务处于活动状态在任何给定的时间.