首页 > 其他 > 详细

轻量级锁

时间:2020-07-20 22:09:46      阅读:79      评论:0      收藏:0      [点我收藏+]

synchronized修饰的对象lock在做交换时:

首先在线程中创建一个锁记录 ,lock对象的头markword和

技术分享图片

 

如上图:lock记录有一个指针指向对应的对象的地址,首先判断flag==01?  如果flag为00,那么表示这个锁被其他线程占用,如果为01,那么可以执行markword和lock record的交换操作,并且置flag==00,后面的线程如果想获得锁就不能获得了,因为flag==00;当synchronized中的代码执行完,会执行锁对象的解锁操作:交换lock对象中的头部信息和lockrecord中的头部信息,并且恢复flag==01.

 

锁重入:线程中的部分代码也使用同一个lock对象修饰,那么就会发生锁重入,锁重入不会发生lock对象和新的lockrecord头部的交换,因为此时flag==00.

 

技术分享图片

 

 重量级锁:thread01线程申请锁失败,为lock对象申请一个Monitor锁(重量级锁),并且使当前的lock对象头部(最初为Mark word所在的位置)指向Monitor锁,并且让owner指向锁记录:因为轻量级锁不能有等待队列

  

 

 

 

 

轻量级锁

原文:https://www.cnblogs.com/guosai1500581464/p/13347423.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!