synchronized已经能满足我们日常的线程安全需求了,
- synchronized是基于代码阻塞的机制,
- 也就是当某个线程占用资源时,其他线程是无法进入的,
- 如果这个线程出现问题的时候,
- 出现大量线程阻塞,
- CPU就会耗费大量资源来处理阻塞在外的这些线程,
- 但是CPU的任务本不该如此,
- 还极可能出现死锁等问题,
- 对于这样的简单操作反而显得有些笨重,
- 所以应该有更合适更高效的方法来处理这样的问题。
- 所以就有了CAS
synchronized是采用的是悲观锁策略,
- 并不是特别高效的一种解决方案
https://www.jianshu.com/p/84c75074fa03
在J.U.C下的atomic包提供了一系列的操作简单,
- 性能高效,并能保证线程安全的类去更新基本类型变量,数组元素,引用类型以及更新对象中的字段类型。
- atomic包下的这些类都是采用的是乐观锁策略去原子更新数据,
- 在java中则是使用CAS操作具体实现。