背景
在 JDK1.5 之前,面对 Java 并发问题, synchronized 是一招鲜的解决方案:
1. 普通同步方法,锁上当前实例对象
2. 静态同步方法,锁上当前类 Class 对象
3. 同步块,锁上括号里面配置的对象
拿同步块来举例:
1
2
3
4
5
public void test(){
synchronized (object) {
i++;
}
}
经过 javap -v 编译后的指令如下:
monitorenter 指令是在编译后插入到同步代码块的开始位置;monitorexit是插入到方法结束和异常的位置(实际隐藏了try-