Monitor的原理

目录

一.java对象头

二.Monitor原理


一.java对象头

64 位虚拟机 Mark Word:
Normal:无锁状态
Biased:偏向锁状态
Lightweight Locked:轻量级锁
Heavyweight Locked:重量级锁
Marked for GC:标记为GC

二.Monitor原理

Monitor 被翻译为 监视器 管程
        每个 Java 对象都可以关联一个 Monitor 对象,如果使用 synchronized 给对象上锁(重量级)之后,该对象头的 Mark Word 中就被设置指向 Monitor 对象的指针。
Monitor 结构如下:
(1)刚开始 Monitor Owner null
(2)当 Thread-2 执行 synchronized(obj) 就会将 Monitor 的所有者 Owner 置为 Thread-2 Monitor 中只能有一 个 Owner
(3)在 Thread-2 上锁的过程中,如果 Thread-3 Thread-4 Thread-5 也来执行 synchronized(obj) ,就会进入 EntryList BLOCKED
(4)Thread-2 执行完同步代码块的内容,然后唤醒 EntryList 中等待的线程来竞争锁,竞争的时是非公平的
(5)图中 WaitSet 中的 Thread-0 Thread-1 是之前获得过锁,但Owner 线程发现条件不满足,调用 wait 方法进入 WAITING 状态的线程。
(6)BLOCKED WAITING 的线程都处于阻塞状态,不占用 CPU 时间片 BLOCKED 线程会在 Owner 线程释放锁时唤醒。WAITING 线程会在 Owner 线程调用 notify notifyAll 时唤醒,但唤醒后并不意味者立刻获得锁,仍需进入 EntryList 重新竞争
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值