在Java(v6)中实现Win32等效的WaitForMultipleObjects最优雅的方法是什么.线程正在休眠,直到发生多个事件之一.当发生这种情况时,我想处理它并重新入睡.不需要数据,只需要一个事件.
这实际上取决于你想用它做什么,但你可以做一些像使用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...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2769 次 |
| 最近记录: |