java面试题网

普通会员

108

帖子

11

回复

136

积分

楼主
发表于 2018-05-25 14:07:54 | 查看: 656| 回复: 0

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

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

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

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



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

java面试题网无聊看看网与java建站系统提供技术支持V2.1 网站地图 © 2016-2018