Synchronized关键字

2018-09-02  本文已影响15人  游牧族人
synchronized 的实现原理

JVM基于进入和退出 monitor 对象来实现方法同步和代码块同步,其中进出 monitor 对象使用 monitorenter 指定和 monitorexit 指令实现。
monitorenter 是在编译后插入到同步代码块的位置,monitorexit 是在编译后插入到同步代码块结束或者异常发生的位置。每一个 monitorenter 都会与一个 monitorexit 对应,当一个 monitor 对象被持有后,他便处于锁定状态,不能再被其他线程持有。

synchronized 可以保证操作的原子性和可见性
原子性:synchronized 代码块中的语句要么全部执行要么全不执行。
可见性:当线程离开同步代码块的时候会将线程本地内存同步回主内存。

synchronized 属于重量级锁

上一篇 下一篇

猜你喜欢

热点阅读