同步对静态字段的访问

Sea*_*ean 6 java static synchronization

在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)

有任何想法吗?

Boz*_*zho 6

客户端可以这样做,但您无法强制执行此类同步.因此,某些客户端可能会执行不同步的访问,并破坏所有内容.