SexyB0y
SexyB0y
2021-01-20 23:40

shisynchronized关键字的锁在升级过程中,lock record是在什么时候生成的?

  • java
  • java-ee

        看了些文章有些迷迷糊糊的,说法1:偏向锁在mark word里保存获取锁的线程ID时也会在线程栈帧里开辟一块空间保存lock record,此时的lock record值保存了获得锁的线程ID和一个owner指针,这个指针指向锁对象的mark word,且每次锁重入时都会重复生成lock record,且后续的lock record只保存了owner指针,而升级为轻量级锁时lock record保存的是mark word的备份和owner指针,在锁重入时也会重复生成只包含owner指针的lock record。

        说法2:是偏向锁被竞争锁的线程撤销并转为轻量级锁时才会生成lock record并进行mark word的拷贝。

        而我找到的官方的说法是:“When an object is lightweight locked by a monitorenter bytecode, a lock record is either implicitly or explicitly allocated on the stack of the thread performing the lock acquisition operation. ”这是否代表说法二是对的呢?还有就是关上文说法于lock record重复生成的说法是对的吗?这一块把我搞懵了,网上的文章说法都不一致,还有这篇文章

【Java并发004】原理层面:synchronized关键字全解析 - 微信公众号-标准Java - 博客园​www.cnblogs.com

        里面第五点提到重量级锁会降级为轻量级锁又是怎么回事呢?问题有点多很抱歉,希望大佬们能帮我解答一下,这些问题困扰我好几天了。

  • 点赞
  • 回答
  • 收藏
  • 复制链接分享

2条回答

为你推荐

换一换