synchronized的三种用法
1.修饰方法块
public synchronized String getUserName() {
System.out.println(userName);
return userName;
}
每一个对象内都有一个默认的monitor锁,使用synchronized修饰是对当前对象加锁。
那么,如果这个对象中还有另外一个方法被synchronized修饰,这两个方法也会相互竞争,谁得到锁,谁先执行。
2.修饰代码块
需要指定在哪个对象上加锁。
public String getUserName() {
synchronized (this){
System.out.println(userName);
return userName;
}
}
一般的话,是在this上加锁,那么和case1在方法上加锁,其实没什么区别。
3.修饰静态方法
是对类的class对象加锁。如果有两个静态方法都是synchronized的,那么这两个方法也是会同步进行。