【发布时间】:2015-10-12 09:23:12
【问题描述】:
我有生产者和消费者与BlockingQueue 连接。
消费者等待队列中的记录并进行处理:
Record r = mQueue.take();
process(r);
我需要从其他线程暂停这个过程一段时间。如何实现?
现在我想这样实现它,但它看起来像一个糟糕的解决方案:
private Object mLock = new Object();
private boolean mLocked = false;
public void lock() {
mLocked = true;
}
public void unlock() {
mLocked = false;
mLock.notify();
}
public void run() {
....
Record r = mQueue.take();
if (mLocked) {
mLock.wait();
}
process(r);
}
【问题讨论】:
-
您介意提供更多关于您的特定需求的背景信息吗?我问的原因是,如果我真的需要暂停链中的某个人,我宁愿暂停生产者而不是消费者。它基本上实现了类似的效果,而不会在暂停生效时队列增长到容量。
标签: java multithreading producer-consumer blockingqueue