synchronized 使用方式:
// 锁对象为: 当前实例
public synchronized method(){
// do something
}
// 锁对象为: 当前 class 对象
public static synchronized method(){
// do something
}
// 锁对象为: 括号中的对象
public void method(){
// 可配置任意非 null 对象
synchronized(object){
// do something
}
}
同步基础:
当一个线程进入到同步代码块时,必须先获取锁,在退出或发生异常时,释放锁。
Java 虚拟机中的同步(synchronized)是用 monitor 的进入和退出来实现。无论显示同步(有明确的 monitorenter 和 monitorexit 指令),还是隐式同步(依赖方法调用和返回指令实现)都是如此。
在 Java 语言中,同步用的最多的地方是经 synchronized 锁修饰的同步方法,同步方法并不用 monitorenter 和 monitorexit 指令来实现,而是由方法调用指令读取运行时常量池中方法的 ACC_SYNCHRONIZED 标志来隐式实现的。
monitorenter 和 monitorexit 指令用于编译同步代码块:
二、Java 对象头
三、锁升级
四、总结
原文:https://www.cnblogs.com/chen-jia-cheng/p/14705067.html