结合CAS和volatile可以实现无锁并发,适用于线程数较少、多核CPU的场景下。
- CAS是基于乐观锁的思想:最乐观的估计,不怕别的线程来修改共享变量,就算改了也没关系,我吃亏点再重试呗。
- synchronized是基于悲观锁的思想:最悲观的估计,得防着其他线程来修改共享变量,我上了锁你们都别想改,我改完了解开锁,你们才有机会。
- CAS体现的是无锁并发,无阻塞并发
- 因为没有用synchronized,所以线程不会陷入阻塞,这是提升效率的因素之一
- 但如果竞争激烈,可以想到重试必然频繁发生,反而效率会影响