共计 487 个字符,预计需要花费 2 分钟才能阅读完成。
CAS 操作
6.1 CAS 操作过程
6.2 CAS 带来的问题
6.2.1 ABA 问题
6.2.2 自旋节约大量的处理器资源
与线程阻塞相比,自旋会节约大量的处理器资源。这是因为以后线程 仍处于运行状况,只不过跑的是无用指令。它冀望在运行无用指令的过程中,锁可能被释放出来。
例如:阻塞相当于熄火停车,自旋状态相当于怠速停车。在十字路口,如果红绿灯期待的工夫十分长,那么熄火绝对省油一些;如果红绿灯的等待时间十分短,怠速停车更适合。
然而,对于 JVM 来说,它并不能看到红灯的剩余时间,也就没法依据等待时间的长短来抉择是自旋还是阻塞。JVM 给出的计划是 自适应自旋 ,依据以往自旋期待时是否获取锁,来动静调整自旋的工夫。 即如果在自旋的时候获取到锁,则会减少下一次自旋的工夫,否则就略微减小下一次自旋时长,对于咱们的例子就是:如果之前不熄火期待了绿灯,那么这次不熄火的工夫就长一点;如果之前不熄火没期待绿灯,那么这次不熄火的工夫就短一点。
6.2.3 CAS 带来的公平性问题
自旋状态带来另外一个副作用——不偏心的锁机制。处于阻塞状态的线程无奈立即竞争被开释的锁。然而处于自旋状态的线程,则很有可能优先取得这把锁。
正文完