CAS运算6.1CAS运算过程6.2CAS带来的问题6.2.1ABA问题6.2.2自旋浪费大量处理器资源与线程阻塞相比,自旋会浪费大量处理器资源。这是因为当前线程还在运行,只是在运行无用的指令。它期望在运行未使用的指令的过程中释放锁。例如:阻塞状态相当于关闭发动机,旋转状态相当于怠速停止。在路口,如果等红绿灯的时间很长,熄火比较省油;如果等红绿灯的时间很短,怠速比较合适。但是对于JVM来说,它看不到红灯的剩余时间,所以无法根据等待时间的长短来选择是自旋还是阻塞。JVM给出的解决方案是adaptivespin,在过去等待自旋的过程中,根据能否获取到锁来动态调整自旋时间。也就是说,如果在自旋过程中获得了锁,则下一次自旋的时间会增加,否则,下一次自旋的持续时间会略微减少。关闭发动机的时间会更长;如果之前没有熄火,也没有等到绿灯,那么这次不熄火的时间会更短。6.2.3CAS带来的公平性问题自旋状态的另一个副作用是不公平的锁机制。处于阻塞状态的线程不能立即竞争释放的锁。但是,处于自旋状态的线程很可能先获得这个锁。
