java - 具有条件问题的blockingQueue

时间:2014-01-09 21:04:05

标签: java multithreading producer-consumer blockingqueue

我有两个线程,第一个执行一些任务(称为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()我自己,但我更喜欢使用现有的解决方案。

任何建议都会受到赞赏吗?

0 个答案:

没有答案