page contents

synchronize轻量级锁释放问题

Pack 发布于 2020-01-17 15:46
阅读 459
收藏 0

用synchronize修饰同步快的时候,会有一对monitorenter和monitorexit指令,当升级到轻量级锁的时候,monitorenter会对锁对象头中会存储获得objectMonitor的线程的指针,owner会存储当前线程。


1.那么轻量级锁执行monitorexit的时候会发生什么?

2.新线程b自旋cas的时候更新值肯定是线程b的指针,那么value和expecte是什么值?这俩个值是怎么取的?

215
Pack
Pack

1.轻量级锁释放,由于都是对于lock record的修改,会有两种情况,一种情况是竞争(升级)、一种是直接释放

2.自旋的时候,是在线程栈帧里面创建一块空间Lock Record,然后把Mark Word中的部分字节CAS更新指向线程栈中的Lock Record。预期值、更新值,就很明显了。 预期值就是原来持有轻量级锁的线程的lockrecord的引用。

请先 登录 后评论