同步块中的静态与非静态锁定对象
2022-09-01 02:34:43
尝试可视化和理解同步。
- 对同步块使用静态锁定对象(代码 A)和非静态锁定对象(代码 B)之间有什么区别?
- 它在实际应用中有何不同?
- 一个人会有什么陷阱,而另一个人不会有?
- 确定使用哪一个的标准是什么?
代码 A
public class MyClass1 {
private static final Object lock = new Object();
public MyClass1() {
//unsync
synchronized(lock) {
//sync
}
//unsync
}
}
代码 B
public class MyClass2 {
private final Object lock = new Object();
public MyClass2() {
//unsync
synchronized(lock) {
//sync
}
//unsync
}
}
注意
上面的代码显示了构造函数,但您可以讨论静态方法和非静态方法中的行为有何不同。此外,当同步块正在修改静态成员变量时,使用静态锁是否有利?
我已经看过这个问题的答案,但还不够清楚不同的使用场景是什么。