WaitForMultipleObjects в Java - PullRequest
       16

WaitForMultipleObjects в Java

4 голосов
/ 25 апреля 2009

Какой самый элегантный способ реализовать Win32-эквивалент WaitForMultipleObjects в Java (v6). Поток спит, пока не произойдет одно из нескольких событий. Когда это произойдет, я хочу обработать это и вернуться в сон. Данные не требуются, просто событие.

Ответы [ 3 ]

5 голосов
/ 25 апреля 2009

Это действительно зависит от того, что вы хотите с ним сделать, но вы можете сделать что-то столь же простое, как использование методов ожидания / уведомления, или вы можете использовать структуры из пакета 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...
0 голосов
/ 11 мая 2012

Вы можете использовать CountDownLatch объект, предоставленный java.util.concurrent package

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

0 голосов
/ 25 апреля 2009

Достаточно угадать Object.wait (), Object.notify () и Object.notifyAll ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...