当您有如下方法时:
public synchronized void addOne() { a++; }
相当于以下内容:(如果我错了,请纠正我)
public void addOne() { synchronized(this) { a++; } }
但是,下面的方法等价于什么呢?:
public static synchronized void addOne() { a++; // (in this case 'a' must be static) }
什么是与静态同步方法作用相同的同步块? 我知道静态同步方法是在类上同步的,而不是在实例上同步的(因为没有实例),但是它的语法是什么?
它相当于锁定类对象。您可以通过在类名称后面加上 .class . 所以,有点像:
.class
synchronized(YourClass.class) { }
见 Java Language Specification, Section 8.4.3.6 synchronized Methods :
synchronized
同步方法获取锁 (_§17.1)在执行之前。对于一个 类(静态)方法,锁 与的类对象关联 使用了方法的类。对于一个 实例方法,关联的锁 与此(对象 方法被调用)。