java 可重入锁举例说明,现实一点的更好

java 可重入锁的应用场景,有没有能说明的例子,我不太理解为什么要使用可重入锁。

java 的 synchronized 关键字其实就是支持可重入的。

假设 synchronized 不支持重入,简单举个例子吧,如下:

我们看到 Person 有个 say 方法,有 synchronized 修饰; 子类 XiaoMin 有个 dance 方法,也被 synchronized 修饰;
Test中main,实例化一个子类 xiaoMin ,调用它的 dance 方法。

如果 synchronized 不支持重入:
我们看 进入 dance 方法,首先会获取一个锁, 这个锁 是加在 XiaoMIn这个类上的;然后 在 dance方法里 又调了 say这个方法,也有个 synchronized ,它获得的锁也是加在 XiaoMin这个类上的;
那 这个 say 方法就要 等待 dance 方法执行完 才 释放锁,而say 方法不执行完 ,dance方法就不会结束, 这就陷入了死循环了。

所以 synchronized 支持可重入,就是为了解决这种场景的。

public class Test {

    public static void main(String[] args) {

        XiaoMin xiaoMin = new XiaoMin();
        xiaoMin.dance();

    }
}

public class Person {

    public synchronized void say() {
        System.out.println("say");
    }
}

public class XiaoMin extends Person{

    public synchronized void dance() {
        System.out.println("dance");
        say();
    }
}

img


如有帮助,欢迎采纳哈!

在这里插入图片描述

本人的开源项目,欢迎star支持下!!!