java面试题网

普通会员

160

帖子

12

回复

165

积分

楼主
发表于 2018-05-25 15:22:06 | 查看: 5088| 回复: 0

synchronized 的实现原理以及锁优化

原理:synchronized底层是通过一个monitor的对象阻塞和获取。

    对代码同步:指令执行时,monitor的进入数减1,如果减1后进入数为0,那线程退出monitor,不再是这个monitor的所有者。其他被这个monitor阻塞的线程可以尝试去获取这个 monitor 的所有权。 

    对方法同步:常量池中多了ACC_SYNCHRONIZED标示符。JVM就是根据该标示符来实现方法的同步的:当方法调用时,调用指令将会检查方法的 ACC_SYNCHRONIZED 访问标志是否被设置,如果设置了,执行线程将先获取monitor,获取成功之后才能执行方法体,方法执行完后再释放monitor。在方法执行期间,其他任何线程都无法再获得同一个monitor对象。

    重量级锁:Mutex Lock 监视器锁monitor本质就是依赖于底层的操作系统的Mutex Lock来实现的。


文章来自www.wityx.com,转载请注明出处!原文地址http://www.wityx.com/post/462_1_1.html

您需要登录后才可以回帖 登录 | 立即注册

java面试题网www.wuliaokankan.cnjava建站系统提供技术支持V2.1 网站地图 © 2016-2018