14、JAVA中CAS与原子类
- CAS即compare and Swap,他体现的一种乐观锁的思想,比如多个线程要对一个共享的整型变量执行+1操作:

- 获取共享变量是,为了保证该质量的可见性,需要使用volatile修饰,结合CAS和volatile可以实现无锁并发,适用于竞争不激烈,多核CPU的场景下,
- 因为没有使用synchronized,所以线程不会陷入阻塞,这是效率提升的因素之一
- 但如果竞争激烈,可以想象重试必然频繁发生,反而会影响效率
- CAS底层依赖于一个Unsafe类来直接调用操作系统底层的CAS指令
- 乐观锁和悲观锁
- CAS是给予乐观锁的思想:最乐观的估计,不怕别的线程来修改共享变量,就算改了也没有关系,我吃亏一点在重试
- synchronized是基于悲观锁的思想:最悲观的估计,得防着其他线程来修改共享变量,我上了锁你们都别想改
- 原子操作类:juc(java.util.concurrent)中提供了原子操作类,可以提供线程安全操作,例如:AtomicInteger、AtomicBoolean等,他们的底层就是采用CAS技术+volatile来实现的
