0
点赞
收藏
分享

微信扫一扫

Monitor 概念

勇敢乌龟 2022-04-23 阅读 86
java

Java 对象头

以 32 位虚拟机为例
普通对象
在这里插入图片描述

数组对象
在这里插入图片描述

其中 Mark Word 结构为
在这里插入图片描述

64 位虚拟机 Mark Word
在这里插入图片描述
参考资料

Monitor 原理

Monitor 被翻译为监视器或管程
每个 Java 对象都可以关联一个 Monitor 对象,如果使用 synchronized 给对象上锁(重量级)之后,该对象头的
Mark Word 中就被设置指向 Monitor 对象的指针
Monitor 结构如下
在这里插入图片描述

  • 刚开始 Monitor 中 Owner 为 null
  • 当 Thread-2 执行 synchronized(obj) 就会将 Monitor 的所有者 Owner 置为 Thread-2,Monitor中只能有一个 Owner
  • 在 Thread-2 上锁的过程中,如果 Thread-3,Thread-4,Thread-5 也来执行 synchronized(obj),就会进入EntryList BLOCKED
  • Thread-2 执行完同步代码块的内容,然后唤醒 EntryList 中等待的线程来竞争锁,竞争的时是非公平的
  • 图中 WaitSet 中的 Thread-0,Thread-1 是之前获得过锁,但条件不满足进入 WAITING 状态的线程, 是获得了锁 但是调用wait方法
    注意:
    synchronized 必须是进入同一个对象的 monitor 才有上述的效果不加 synchronized 的对象不会关联监视器,不遵从以上规则
举报

相关推荐

0 条评论