Java回顾---锁

为什么非可重入锁会导致死锁

public class Count{
    
    
    Lock lock = new Lock();
    public void print(){
    
    
        lock.lock();
        doAdd();
        lock.unlock();
    }
    public void doAdd(){
    
    
        lock.lock();
        //do something
        lock.unlock();
    }
}

上面代码我们可以看到,效执行print,拿到print的锁,然后print中调用的doAdd,但是doAdd又有一个锁,那么需要去获取doAdd的锁,但是这时由于print我们还没有执行完,所以print的锁还不能释放,但是这时有需要获取到doAdd的锁,这样就导致了死锁。

猜你喜欢

转载自blog.csdn.net/why1092576787/article/details/114702976