Java中的WaitForMultipleObjects

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

这实际上取决于你想用它做什么,但你可以做一些像使用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... 

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

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

只是猜测Object.wait(),Object.notify()和Object.notifyAll()就足够了。