开发者社区> 问答> 正文

synchronized 里面的 minitor 模式实现的原理?

synchronized 里面的 minitor 模式实现的原理?

展开
收起
景凌凯 2020-04-22 17:08:02 902 0
1 条回答
写回答
取消 提交回答
  • 有点尴尬唉 你要寻找的东西已经被吃掉啦!

    Java 中每一个对象都可以作为锁,这是 synchronized 实现同步的基础:普通同步方法,锁是当前实例对象。静态同步方法,锁是当前类的class对象。同步方法块,锁是括号里面的对象。每个对象有一个监视器锁。对于同步代码块,monitorenter 指令插入到同步代码块的开始位置,monitorexit 指令插入到同步代码块的结束位置。对于 monitorenter,如果 monitor 的进入数为 0,则该线程进入 monitor,然后将进入数设置为 1,该线程即为 monitor 的所有者。如果线程已经占有该 monitor,只是重新进入,则进入 monitor 的进入数加 1。如果其他线程已经占用了 monitor,则该线程进入阻塞状态,直到 monitor 的进入数为 0,再重新尝试获取 monitor 的所有权。对于 monitorexit,指令执行时,monitor 的进入数减 1,如果减 1 后进入数为 0,那线程退出 monitor,不再是这个 monitor 的所有者。对于 synchronized 方法,会被翻译成普通的方法,JVM 根据 ACC_SYNCHRONIZED 标示符来实现方法的同步。当方法调用时,调用指令将会检查方法的 ACC_SYNCHRONIZED 访问标志是否被设置,如果设置了,执行线程将先获取 monitor,获取成功之后才能执行方法体,方法执行完后再释放 monitor。在方法执行期间,其他任何线程都无法再获得同一个 monitor 对象。

    2020-04-22 17:08:13
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载