Monitor监视器对象

在分析完对象头以后,我们知道对象头里其实是有一个重量级锁的指针,而重量级锁的指针指向的就是monitor监视器对象。
synchronized无论是修饰代码块还是修饰普通方法和静态方法本质上还都是作用在对象上

为什么说本质上synchronized还是作用在对象上(猜测)?

synchronized分为对象锁和类锁。对象锁,锁的是实例化对象。而类锁加在了类上,会对每一个该类的实例化对象上锁,说白了还是加在对象上。
类的信息是存放在方法区,该类的每一个实例对象都有一个Kclass point指针(对象头中)指向其类信息。如果类有了锁标志,其实例化对象中的markword的锁标志会修改,从而所有的实例化对象的会拥有相同的锁,也就是拥有相同的monitor。所以本质还是作用在对象上。

  • 不管是类锁还是对象锁,多线程获取锁的本质其实是获取的monitor对象。

monitor对象长啥样?

monitor
当多个线程同时访问一段同步代码时,首先会进入_EntryList队列中,当某个线程获取到对象的monitor后进入_Owner区域并把monitor中的_owner变量设置为当前线程,同时monitor中的计数器_count加1。即获得对象锁。

若持有monitor的线程调用wait()方法,将释放当前持有的monitor,_owner变量恢复为null,_count自减1,同时该线程进入_WaitSet集合中等待被唤醒。
在这里插入图片描述

参考
Monitor原理
monitor是什么

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值