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的锁,这样就导致了死锁。

上一篇:mysql中的LOCK TABLES和UNLOCK TABLES


下一篇:MySQL的SQL语句事务性语句和锁定语句(4)LOCK INSTANCEFORBACKUP 等语句