原子性: 要嘛成功要吗不做,不半途而废
起源:
原子性操作是编程世界种非常常见的一种操作,比如数据库操作的事务等,是避免脏数据的重要手段
成员
-
synchronized: 加锁实现实现原子性,有可能造成资源的等待,性能不是最优解
-
CAS处理:一个内存地址V,一个期望的值A和一个新值B,操作的时候如果这个地址上存放的值等于这个期望的值A,则将地址上的值赋为新值B,否则不做任何操作,
所以CAS 操作是一个循环的一个过程
使用
-AtomicInteger :原子操作基本数据类型
- AtomicIntegerArray: 原子操作数组类型
- AtomicReference:原子操作引用类型
- AtomicStampedReference:利用版本戳的形式记录了每次改变以后的版本号,这样的话就不会存在ABA
ABA问题:达到你想要的想要的值了,但是中间是有了变化的,解决这种问题可以加上一个标记位或者版本号当发生版本加1 ,来标记动了几步;
常见面试问题
i++ 和 ++i 是否是原子性操作??
从字节码上来看,是分了多步执行