总结
原子操作是指不会被线程调度机制打断的操作,这种操作一旦开始,就一直运行到结束,中间不会有任何线程上下文切换。
原子操作可以是一个步骤,也可以是多个操作步骤,但是其顺序不可以被打乱,也不可以被切割而只执行其中的一部分,将整个操作视作一个整体是原子性的核心特征。
在java中提供了很多原子类
问题
关于原子类的问题,大概有以下这些:
(1)Unsafe是什么?
(2)Unsafe的实例怎么获取?
(3)Unsafe的CAS操作?
(4)Unsafe的阻塞/唤醒操作?
(5)Unsafe实例化一个类?
(6)实例化类的六种方式?
(7)原子操作是什么?
(8)原子操作与数据库ACID中A的关系?
(9)AtomicInteger怎么实现原子操作的?
(10)AtomicInteger主要解决了什么问题?
(11)AtomicInteger有哪些缺点?
(12)ABA是什么?
(13)ABA的解决方法?
(14)AtomicStampedReference是怎么解决ABA的?
(15)CPU的缓存架构是怎样的?
(16)CPU的缓存行是什么?
(17)伪共享是什么原因导致的?
(18)怎么避免伪共享?
(19)LongAdder的实现方式?
(20)LongAdder是怎么消除伪共享的?
(21)LongAdder与AtomicLong的性能对比?
(28)LongAdder中的cells数组是无限扩容的吗?
可以参考
【JDK源码】魔法类Unsafe
【JDK源码】并发原子类AtomicInteger
【JDK源码】并发原子类AtomicStampedReference
CPU缓存行、伪共享
【JDK源码】并发原子类LongAdder