(4.5)Monitor实现重量级锁

4.5 Monitor (重量级锁)

Monitor被翻译为监视器或管程, 在Java中每个对象可以关联一个Monitor对象,Monitor是操作系统提供的、用于实现对象的加锁机制的角色。

使用Monitor(重量级锁)给synchronized对象加锁的过程:

  • Java对象被加锁,则MarkDown中的ptr_to_heavyweight_monitor指针存储Monitor的地址
  • Monitor中的Owner指向加锁对象,对象执行加锁代码
  • 在Thread-2加锁过程中,如果有其他线程来获取锁对象时,发现MarkWord以及指向了Monitor,说明当前对象锁已被获取,所以进入EntryList变为Blocked状态
  • Thread-2执行同步代码块之后,重置MarkWord为普通对象头的值(hashcode等),唤醒EntryList中等待的线程来竞争锁,是非公平竞争
  • WaitSet中的线程是之前获取过锁,但因为等待其他线程所以进入waiting状态的线程

posted @ 2022-08-24 16:10  言思宁  阅读(121)  评论(0编辑  收藏  举报