在Josh Bloch的Effective Java第67章中,他提到如果方法修改静态字段,则必须同步对该字段的访问,因为客户端无法对此类方法执行外部同步.我不太明白为什么客户端无法在静态方法上执行外部同步?
内部同步实现:
public class Serial {
private static int serialNumber = 0;
public synchronized static void incSerial() {
serialNumber++;
}
}
Run Code Online (Sandbox Code Playgroud)
如果没有实现内部同步,客户端可以在外部同步:
synchronize(Serial.class) {
Serial.incSerial();
}
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?