signal()
,await()
或signalAll()
的来电是否始终需要介于lock()
和unlock()
之间?
示例:
import java.util.Scanner;
import java.util.concurrent.locks.ReentrantLock;
import java.util.concurrent.locks.Condition;
class A{
int num=0;
boolean onoff=false;
private final ReentrantLock key=new ReentrantLock();
private final Condition setCondi=key.newCondition();
void input(int i){
key.lock();
try{
if(onoff==true)
setCondi.await();
num=i;
onoff=true;
setCondi.signal();
}
catch(InterruptedException e){
e.printStackTrace();
}
finally{
key.unlock();
}
num=i;
onoff=true;
setCondi.signal();
答案 0 :(得分:2)
当此方法执行时(并且通常会)要求当前线程保持与此
Condition
关联的锁定 被称为。实现必须记录此前提条件和任何前提条件 如果没有锁定则采取的行动。 通常,例外情况 因为IllegalMonitorStateException
将被抛出。
所以,是的,在典型的实现中,必须在持有signal()
的同时完成对Condition
(和其他Lock
方法)的调用。