Java 重新获取锁

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

Im声明了一个类型为Condition的变量:

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() 
    }
}
问题:

  • 我在这里说的对吗,方法wait意味着释放锁?
    waitingCond.await();//等待释放锁

  • 如果我上面所说的是正确的,那么下面的语句是否再次启用锁(线程持有锁)

    waitingCond.await();//等待释放锁

    nNordWaiting++;//找回锁

  • 我想理解的是:
    waitingCond.await()之后的任何语句可以重新获取锁吗

    非常感谢。

    来自on Lock。新条件:

    private Condition waitingCond;
    
    调用Condition.await()将在等待之前自动释放锁,并在等待返回之前重新获取锁

    这意味着当调用await()时,锁被释放,但一旦代码继续通过await,锁就会自动重新获得

    详细说明(重点矿山)的文件:

    与此条件相关的锁会自动释放,并且 出于线程调度目的,当前线程被禁用,并且 处于休眠状态,直到发生以下四种情况之一:

    • 其他一些线程为此条件调用signal()方法,并 当前线程恰好被选为要唤醒的线程;或
    • 其他一些线程为此调用signalAll()方法 条件或
    • 其他线程会中断当前线程,并且 支持中断挂线;或
    • “虚假的觉醒” 发生
    在所有情况下,之后,此方法才能返回当前线程 必须重新获取与此条件关联的锁。当 线程返回并保证持有此锁。


    那么我写的是对的?waitingCond.wait();//等待释放锁nNordWaiting++;//取回lock@user962800对(好吧,学究式的,过于文字化的不--
    nNordWaiting++
    实际上并没有“拿回锁”。它已经被重新获得了。所以更准确的评论可能是“已经重新获得了锁”,而真正的重新获得发生在那句话之前。)下面的答案有用吗?如果是这样,你应该接受它作为一个答案。