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();
}
}
如有帮助,欢迎采纳哈!