gpt4 book ai didi

java - 可重入锁定

转载 作者:搜寻专家 更新时间:2023-10-30 21:24:38 27 4
gpt4 key购买 nike

请提供一点帮助,请考虑下面的代码。

public class Widget {
public synchronized void doSomething() {
...
}
}

public class LoggingWidget extends Widget {
public synchronized void doSomething() {
System.out.println(toString() + ": calling doSomething");
super.doSomething();
}
}

我读到,当 LoggingWidget 中的 doSomething() 被调用时,JVM 将尝试先获取 LoggingWidget 上的锁,然后再获取 Widget 上的锁。

我很想知道原因。是因为 JVM 知道 doSomething() 调用了 super.doSomething() 还是因为调用子类方法也总是会获取父类(super class)的锁。

干杯

最佳答案

你错了——锁是在实例级别获得的。您的示例中只有一个锁,因为当您说时只创建了一个实例:

Widget w = new LoggingWidget

您可以将锁(也称为监视器互斥锁信号量)视为单独“附加”到JVM

如果您在 LoggingWidget 子类上有另一个 synchronized 方法,您会发现这是真的。不可能同时调用此(新)方法和 doSomething 方法 [在同一对象上使用不同的线程]。

这也适用于父类(super class)上的另一个 synchronized 方法(即它不会以任何方式被覆盖的方法影响)。

关于java - 可重入锁定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1104695/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com