轻量级锁

锁优化的过程:无锁->偏向锁->轻量级锁->重量级锁

假设许多存在数据竞争的情形都是一个线程执行完同步代码后,另外一个线程才开始竞争锁;

问题1 如何获取轻量级锁?
没有引入偏向锁的情形
当线程T1请求对象锁,即JVM执行monitorenter字节码指令时,

如果最初对象锁处于无锁状态unlocked,即共享对象头mark wordtag bits值为01,偏向模式标记位是0
首先,在线程T1的私有栈中分配lock record
此时,lock record由两部分组成:displaced hdrowner

然后复制共享对象头此时的mark record值到lock recorddisplaced hdr,使得owner指针指向共享对象的内存地址;

接着,尝试使用CAS设置共享对象头mark word指向线程T1的lock record
此时必操作成功,因为此时只有线程T1在请求锁,则设置共享对象头mark wordtag bits值为00,线程T1获得轻量级锁,开始执行同步代码;

当T1执行完同步代码,执行monitorexit释放锁时,尝试使用CAS操作设置共享对象头mark word指向线程T1的lock record

如果成功,则说明并没有其他线程来竞争对象锁,对象锁仍处于轻量级状态lightweight locked

如果失败,则说明在线程T1还持有轻量级锁时,有其他线程在竞争对象锁,然后才去一种比较慢的合理方式释放T1持有的轻量级锁,同时通知处于等待的线程去竞争获取锁。

如果共享对象处于轻量级锁状态lightweight locked,即共享对象头mark wordtag bits值为00,即有线程T1已经获得轻量级锁,在执行同步代码,现在线程T2也开始请求对象锁了,则线程T2尝试使用CAS竞争设置共享对象头mark word指向线程T2的lock record
如果失败,则表明线程T1还持有锁,还在临界区域内,就将轻量级锁膨胀为重量级锁;
如果成功,则表示线程T1已经释放锁了,退出临界区域了,否则可能出现两个线程同时进入临界区域,不满足锁的排他性;线程T2开始执行同步代码;

问题2:轻量级锁是如何处理锁重入情形的?
首先,判断对象锁是否处于轻量级状态;如果是,则接着判断对象头mark word 记录的lock record 是否指向当前线程的;如果是,则在前述lock record中压入一个0值。这样是为了方便重入轻量级锁的释放,因为当释放轻量级锁时,如果对象头mark word指向的地址记录一个0值,就可以知道是重入轻量级锁释放锁了,直接释放,不需要更新对象头mark word。这里也是sun公司的hotspot提供的不同于其他虚拟机的轻量级锁优化。

问题3:轻量级锁如何升级为重量级锁?

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,287评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,346评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,277评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,132评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,147评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,106评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,019评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,862评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,301评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,521评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,682评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,405评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,996评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,651评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,803评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,674评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,563评论 2 352

推荐阅读更多精彩内容