自旋锁和自适应自旋锁问题

来源:9-3 synchronized底层实现原理-2

qq_简简单单_132

2019-05-24

问题1: 老师,自适应自旋锁 他是 自旋锁的一个加强版,自旋锁是我一直处理忙循环状态直到获取到锁, 自适应自旋锁是比如我先设定忙循环100次后,那么停止自旋去尝试获取锁,如果100次之后还是没有锁,那么他就会根据相关数据比如锁用户状态来判定,下一次自旋次数是多少次 是这么理解吗?
问题2 :比如一个线程过来自旋1000次,当锁资源在 自旋99次的时候已经被释放了,那么他还是要自旋1000次之后,才开始抢夺锁资源吗?同样的自适应自旋锁可能会优化一下, 可能自旋的不是1000次,有可能优化自旋300次,那也是等待300次之后才可以进行锁的争抢吗?
问题3:无论自旋锁和自适应自旋锁如果是一直没有获取到锁资源,都是会一直处于自旋状态,自适应自旋锁不会说因为我判断可能要等好久,而将线程挂起,这么理解吗?

写回答

1回答

翔仔

2019-05-27

同学好,关于自适应自旋锁相关文书较少,具体还需要看JVM的实现源码,它主要是根据上一次自旋获取情况,比如说在初始自旋次数(默认是10)内,如果能够获得锁,JVM记录下来后,那么它就会在下一次争夺锁的时候认为是能够有希望获得锁的,那么等20次也无所谓(次数需要JVM根据特定算法来决定),所以会延长等待时间,这样做主要也是为了尽可能减少切换造成的开销。

问题2的话是不对的,它只是说最多自旋这么多次就切换,期间争夺成功了就不会自旋了

问题3,自适应其实是依据上次做调整,单次执行跟自旋锁一样,超过限定就会挂起线程。

抱歉这几天都在医院,借了电脑,偷偷答疑下

0
1
qq_简简单单_132
好的 谢谢老师, 注意身体啊!
2019-05-29
共1条回复

剑指Java面试-Offer直通车 百度资深面试官授课

招聘季即将到来,让百度资深面试官来为你的高薪Offer保驾护航

8427 学习 · 1870 问题

查看课程