Synchronized关键字可以用来修饰4种不同类型的代码块:
- 实例方法
- 静态方法
- 实例方法中的代码块
- 静态方法中的代码块
同步方法
public synchronized void add(int value){
this.count += value;
}
注意到此处的Synchronized关键字是加在方法声明处,这会告诉JVM,它是一个同步方法。
实例同步方法的锁,是加在拥有该方法的对象之上。因此每个实例的Synchronized关键字实际上都加在了不同的方法之上。同时只有一个线程能执行该实例的同步方法。
同步静态方法
public static synchronized void add(int value){
count += value;
}
上面是一个同步静态方法。同步静态方法的锁是加在类之上的,而相同的类在JVM中只有一个,一个类中只能有一个线程正在运行,不论它调用的是哪个静态方法。
同步实例代码块
public void add(int value){
synchronized(this){
this.count += value;