Java 重新获取锁
Im声明了一个类型为Condition的变量:Java 重新获取锁,java,multithreading,locking,Java,Multithreading,Locking,Im声明了一个类型为Condition的变量: private Condition waitingCond; 然后,在Bridge的构造函数中,我声明了一个与同一变量关联的条件变量: waitingCond = lock.NewCondition(); 然后,在阻塞方法中,我有: public void getIn(int direction) throws InterruptedException{ lock.lock(); try{ if(direct
private Condition waitingCond;
然后,在Bridge
的构造函数中,我声明了一个与同一变量关联的条件变量:
waitingCond = lock.NewCondition();
然后,在阻塞方法中,我有:
public void getIn(int direction) throws InterruptedException{
lock.lock();
try{
if(direction == Car.DIR_NORTH){
while((nSudWaiting>0))
waitingCond.await();
nNordWaiting++;
//...............
} else {
//............
} waitingCond.signal();
}
finally{
lock.unlock()
}
}
问题:
waitingCond.await();//等待释放锁
waitingCond.await();//等待释放锁
nNordWaiting++;//找回锁
waitingCond.await()之后的任何语句代码>可以重新获取锁吗
非常感谢。来自on Lock。新条件:
private Condition waitingCond;
调用Condition.await()将在等待之前自动释放锁,并在等待返回之前重新获取锁
这意味着当调用await()时,锁被释放,但一旦代码继续通过await,锁就会自动重新获得
详细说明(重点矿山)的文件:
与此条件相关的锁会自动释放,并且
出于线程调度目的,当前线程被禁用,并且
处于休眠状态,直到发生以下四种情况之一:
- 其他一些线程为此条件调用signal()方法,并
当前线程恰好被选为要唤醒的线程;或
- 其他一些线程为此调用signalAll()方法
条件或
- 其他线程会中断当前线程,并且
支持中断挂线;或
- “虚假的觉醒”
发生李>
在所有情况下,之后,此方法才能返回当前线程
必须重新获取与此条件关联的锁。当
线程返回并保证持有此锁。
那么我写的是对的?waitingCond.wait();//等待释放锁nNordWaiting++;//取回lock@user962800对(好吧,学究式的,过于文字化的不--nNordWaiting++
实际上并没有“拿回锁”。它已经被重新获得了。所以更准确的评论可能是“已经重新获得了锁”,而真正的重新获得发生在那句话之前。)下面的答案有用吗?如果是这样,你应该接受它作为一个答案。