synchronized 几种使用方式
同步方法
由于Java的每个对象都有一个内置锁,当 synchronized 关键字修饰方法时,内置锁会保护整个方法。在调用该方法前,需要获得内置锁,否则就处于阻塞状态
public class Test{
/**
* 这种方式是 对象锁。普通实例方法默认同步监视器就是this,即调用该方法的对象
*/
public synchronized void methodA(){
}
/**
* 这中方式是 类锁。synchronized加锁的对象为当前静态方法所在类的Class对象
*/
public synchronized static void methodB(){
}
}
同步代码块
public class Test{
/**
* 这种方式是 类锁
*/
public void methodC(){
synchronized(Test.class){
}
}
/**
* 这种方式是 对象锁。this表示是对象锁
*/
public void methodD(){
synchronized(this){
}
}
/**
* JVM全局常量锁。需要考虑在其它方法中互斥问题
*/
public void methodE(String param){
synchronized(param.intern()){
}
}
}