我有两个线程,第一个执行一些任务(称为TaskManager) 第二个监听事件并将它们存储在队列中(称为EventManager)。 只有当队列不为空并且某些条件为真时,才应唤醒EventManager并开始运行。(当EventManager当前未执行!eventManager.isRunning()时)
实施例。代码:
class TaskManager implements Runnable {
@Override
public void run() {
try {
while (true) {
Object event = blockingQueue.take();
while(event != null && eventManager.isRunning()) {
}
// handle event
}
} catch (InterruptedException ie) {
// handle exception
} catch (Exception e) {
// handle exception
}
}
}
这样,只要队列中没有任何内容,线程就会等待,但如果eventManager仍在运行,那么它将无休止地循环,这将导致饥饿。
是否有任何类似blockingQueue的现有框架会等待并在将某些内容插入队列时被唤醒 另一个条件将满足(保持公平)。
我可以通过使用notify()&来解决这个问题。 wait()我自己,但我更喜欢使用现有的解决方案。
任何建议都会受到赞赏吗?