gpt4 book ai didi

java - 锁定获取顺序

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:58:38 26 4
gpt4 key购买 nike

使用下面的代码,如果一个线程调用 LoggingWidget.doSomething(),线程必须经过的锁获取顺序是什么?(即它是否首先获得 LoggingWidget 的锁定,然后获得 Widget 的锁定?)

public class Widget {
public synchronized void doSomething() {

}
}

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

最佳答案

本例中的锁在 this 上,因此只有一个锁,即实例。如果有多个实例,则每个实例都有一个完全独立的锁,无论它是 Widget 还是 LoggingWidget

让我换一种说法。您的代码在语义上等同于:

public class Widget {
public void doSomething() {
synchronized (this) {
// do stuff
}
}
}

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

只有一个方法被调用,所以只有一个锁。

关于java - 锁定获取顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2415940/

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