同步方法
由于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()){}}
}