WaitForMultipleObjects в Java
Что было бы наиболее элегантным способом реализовать Win32 эквивалент WaitForMultipleObjects в Java (v6). Поток спит, пока не произойдет одно из нескольких событий. Когда это произойдет, я хочу обработать это и вернуться в сон. Никаких данных не требуется, только событие.
3 ответа
Это действительно зависит от того, что вы хотите с ним сделать, но вы можете сделать что-то столь же простое, как использование методов ожидания / уведомления, или вы можете использовать структуры в пакете 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...
Вы можете использовать объект CountDownLatch, предоставленный пакетом java.util.concurrent.
http://rajendersaini.wordpress.com/2012/05/10/waitformultipleobject-in-java/
Достаточно просто угадать Object.wait(), Object.notify() и Object.notifyAll().