尝试可视化和理解同步.
代码A.
public class MyClass1 {
private static final Object lock = new Object();
public MyClass1() {
//unsync
synchronized(lock) {
//sync
}
//unsync
}
}
Run Code Online (Sandbox Code Playgroud)
代码B.
public class MyClass2 {
private final Object lock = new Object();
public MyClass2() {
//unsync
synchronized(lock) {
//sync
}
//unsync
}
}
Run Code Online (Sandbox Code Playgroud)
注意
上面的代码显示了构造函数,但您可以在静态方法和非静态方法中讨论行为的不同之处.另外,当synchronized块修改静态成员变量时,使用静态锁是否有利?
我已经在这个问题中查看了答案,但不清楚不同的使用场景是什么.
我知道当你想锁定只用一个线程执行的方法时,你用synchronized关键字声明它.
那么类,当线程在该类的实例上执行某些代码时,如何提供对整个对象类的锁定呢?
换句话说,当一个线程正在对一个对象执行一个方法时,即使在同一个类的不同实例上也不应该允许其他线程执行相同的方法.