У меня есть производитель и потребитель, связанный с 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);
}
Вы не возражаете обеспечивая немного больше контекста на ваших конкретных потребностей? Причина, по которой я спрашиваю, заключается в том, что если мне действительно нужно приостановить кого-то в цепочке, я бы скорее остановил продюсера, а не потребитель. Он в основном достигает аналогичного эффекта, не увеличивая производительность очереди, пока пауза действует. – sstan