我是多线程的新手,并且遇到线程问题并锁定我的程序。
我通过创建下面的代码简化了我的问题
private final ConcurrentLinkedQueue<String> valueQueue = new ConcurrentLinkedQueue<String>();
private final Object lock = new Lock();
private ProcessValue processor = new ProcessValues();
public void addValue(String value){
synchronized (lock) {
valueQueue.add(value);
lock.notify();
}
}
public void waitForValuesToBeAdded(){
synchronized (lock) {
lock.wait();
executeValues();
}
}
public void executeValues(){
synchronized (lock) {
processor.processValues();
valueQueue.clear();
lock.notify()
}
}
当程序启动时,它会执行waitForValuesToBeAdded
。顾名思义,这只是等待将值添加到队列中。当值被添加时,我们不再wait
被executeValues()
调用。
执行时processor.processValues()
我不希望将值添加到队列 ( valueQueue.add(value)
) 中。我需要他们等到processValues()
完成。我想如果我使用同步块,它会阻止插入,但是当我在processValue
执行时添加另一个值时,一切都会挂起。
我错过了我的程序中的某些内容吗?