java-带条件问题的blockingQueue
我有两个线程,第一个线程执行一些任务(称为TaskManager) 第二个侦听事件并将其存储在队列中(称为EventManager)。 仅当队列不为空且某些条件为真时,才应唤醒EventManager并开始运行。(当EventManager当前未执行时)!EventManager.isRunning()) 例代码:java-带条件问题的blockingQueue,java,multithreading,producer-consumer,blockingqueue,Java,Multithreading,Producer Consumer,Blockingqueue,我有两个线程,第一个线程执行一些任务(称为TaskManager) 第二个侦听事件并将其存储在队列中(称为EventManager)。 仅当队列不为空且某些条件为真时,才应唤醒EventManager并开始运行。(当EventManager当前未执行时)!EventManager.isRunning()) 例代码: class TaskManager implements Runnable { @Override public void run() {
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()解决这个问题,但我更喜欢使用现有的解决方案
如果您有任何建议,我们将不胜感激?请澄清,当队列中有事件且某些条件为真时,您的线程应该被唤醒?可能是某种类型的信号灯?也可能是您在问题中混淆了任务管理器和事件管理器的部分?你的意思不太清楚。是的,当队列中有事件并且某些条件为真时,我的线程应该被唤醒。我已经编辑了这个问题,希望现在更清楚了。。