代码之家  ›  专栏  ›  技术社区  ›  Cratylus

通过executorservice的顺序事件处理

  •  0
  • Cratylus  · 技术社区  · 14 年前

    我有一个事件队列要处理。线程向队列添加事件。
    我创建了一个可运行的任务,在 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);
    
        }
    }
    

    我的问题是如果我打电话 执行 对于执行器,我的代码将获得下一个事件并通过执行器运行下一个runnable。
    我如何知道上一个任务是否已完成,以便我可以再次调用handleNextEvent?
    让任务更新某个状态字段是一个好主意吗?

    谢谢

    2 回复  |  直到 14 年前
        1
  •  6
  •   skaffman    14 年前

    Executors.newCachedThreadPool() 会根据需要创建新线程,所以这不是您想要的。你想要像这样的东西 Executors.newSingleThreadExecutor()

    javadoc :

        2
  •  0
  •   Christian Kuetbach    14 年前