atomic 包描述
java中提供了如上的 原子类;atomic 原子 即原子类的操作都是可以看作是具有原子性的,无锁非阻塞的一种并发实现。核心操作是基于UnSafe类实现的CAS方法,
1. 基本类型原子类
AtomicBoolean
AtomicInteger
AtomicLoing
2. 数组类型原子类
AtomicIntegerArray
AtomicLongArray
AtomicReferenceArray
3. 引用类型原子类
AtomicReference
AtomicStampedReference
AtomicMarkableReference
4. 对象的属性修改类型原子类
AtomicIntegerFieldUpdater
AtomicLongFieldUpdater
AtomicReferenceFieldUpdater
AtomicInteger
API
// 创建一个有默认值的实例
public AtomicInteger(int initialValue)
// 默认值为0 的
public AtomicInteger()
// 设置值
public final void set(int newValue)
// 获取值
public final int get()
// 设置指定值 并返回旧值
public final int getAndSet(int newValue) {
return unsafe.getAndSetInt(this, valueOffset, newValue);
}
// expect 期望值, update 更新的值,如果atomictInteger的值等于期望值,则更新为更新的值, 返回布尔类型 是否更新成功
public final boolean compareAndSet(int expect, int update)
// 获取值,然后自增
public final int getAndIncrement()
//获取值, 然后自减
public final int getAndDecrement()
// 获取值然后自增指定值
public final int getAndAdd(int delta)
//先自增, 然后获取值
public final int incrementAndGet()
//先自减, 然后获取值
public final int decrementAndGet()
//先增加指定值, 然后获取该值
public final int addAndGet(int delta)
// java1.8 之后增加
//IntUnaryOperator 一个函数, 可以将函数的值进行运算,就是添加了lambda的特新操作上 和其他方法类型
public final int updateAndGet(IntUnaryOperator updateFunction)
//...
其他的使用都基本类似, 都使用了unsafe 的CSA算法进行的更新 ,这是一种无锁非阻塞的操作方式,比锁性能更好,能使用atomic解决的尽量使用atomic