我正在使用 aReentrantLock
和 aCondition
来同步两个线程。每当消费者线程await()
在生产者线程执行 a 之前执行 a on 条件时signal()
,事情似乎工作正常。但是,当生产者线程signal()
在消费者线程执行 a 之前执行 a 时await()
,则消费者线程最终将永远等待。这是应该发生的还是我做错了什么?当发出条件信号并且没有等待线程时,预期的行为是什么?
这是消费者的代码:
this.lock.lock();
Log.d("websocket", "Sender acquired lock");
try
{
Log.d("websocket", "Sender waiting for message from server");
this.resultReady.await();
Log.d("websocket", "Sender waking up");
return this.result;
} catch (InterruptedException e)
{
e.printStackTrace();
}
finally {
this.lock.unlock();
}
这是生产者的代码:
Log.d("websocket", "Receiver acquiring lock");
this.lock.lock();
Log.d("websocket", "Receiver acquired lock");
try
{
Log.d("websocket", "Receiver setting result");
result = serviceResult;
Log.d("websocket", "Receiver waking up waiting threads");
this.resultReady.signal();
} finally
{
this.lock.unlock();
}