Java中的WaitForMultipleObjects

时间:2009-04-25 12:38:59

标签: java concurrency

在Java(v6)中实现Win32等效的WaitForMultipleObjects最优雅的方法是什么。线程正在休眠,直到发生多个事件之一。当发生这种情况时,我想处理它并重新入睡。不需要数据,只需要一个事件。

3 个答案:

答案 0 :(得分:5)

这实际上取决于你想用它做什么,但你可以做一些像使用wait / notify方法那样简单的事情,或者你可以使用java.util.concurrency包中的结构。后者本人就是我的选择。您可以轻松设置一个BlockingQueue,您可以让生产者将事件对象放入,消费者阻止删除事件。

// somewhere out there
public enum Events {
  TERMINATE, DO_SOMETHING, BAKE_SOMETHING
}

// inside consumer
Events e;
while( (e = queue.take()) != TERMINATE ) {
  switch(e) {
    case DO_SOMETHING:
      // blah blah
  }
}

// somewhere else in another thread
Events e = BAKE_SOMETHING;
if( queue.offer(e) )
   // the queue gladly accepted our BAKE_SOMETHING event!
else
   // oops! we could block with put() if we want...

答案 1 :(得分:0)

您可以使用 java.util.concurrent 包提供的 CountDownLatch 对象

http://rajendersaini.wordpress.com/2012/05/10/waitformultipleobject-in-java/

答案 2 :(得分:-1)

只需猜测Object.wait(),Object.notify()和Object.notifyAll()即可。

相关问题