原子性
原子操作被认为是原子性; 一个操作是 不可打断 的, 一旦开始, 就运行到结束, 就认为是原子操作, 像 a=0, 只有一个操作, 不可打断, 认为是原子操作, 还有一些语句块, 用 sychronized 加锁后, 也可认为是原子操作;
java 提供了位于包 java.util.concurrent.atomic 中的原子类, 使用该工具包中的原子类, 可在不加锁的情况下对单个变量安全的进行多线程编程;
包中的类
AtomicBoolean 可以用原子方式更新的 boolean 值。
AtomicInteger 可以用原子方式更新的 int 值。
AtomicIntegerArray 可以用原子方式更新其元素的 int 数组。
AtomicIntegerFieldUpdater<T> 基于反射的实用工具,可以对指定类的指定 volatile int 字段进行原子更新。
AtomicLong 可以用原子方式更新的 long 值。
AtomicLongArray 可以用原子方式更新其元素的 long 数组。
AtomicLongFieldUpdater<T> 基于反射的实用工具,可以对指定类的指定 volatile long 字段进行原子更新。
AtomicMarkableReference<V> AtomicMarkableReference 维护带有标记位的对象引用,可以原子方式对其进行更新。
AtomicReference<V> 可以用原子方式更新的对象引用。
AtomicReferenceArray<E> 可以用原子方式更新其元素的对象引用数组。
AtomicReferenceFieldUpdater<T,V> 基于反射的实用工具,可以对指定类的指定 volatile 字段进行原子更新。
AtomicStampedReference<V> AtomicStampedReference 维护带有整数“标志”的对象引用,可以用原子方式对其进行更新。
几个原子类
AtomicBoolean
多用于标志变量
构造方法
AtomicBoolean()
使用初始值 false 创建新的 AtomicBoolean。
AtomicBoolean(boolean initialValue)
使用给定的初始值创建新的 AtomicBoolean。
方法
boolean compareAndSet(boolean expect, boolean update)
如果当前值 == 预期值,则以原子方式将该值设置为给定的更新值。
boolean get()
返回当前值。
boolean getAndSet(boolean newValue)
以原子方式设置为给定值,并返回以前的值。
void lazySet(boolean newValue)
最终设置为给定值。
void set(boolean newValue)
无条件地设置为给定值。
String toString()
返回当前值的字符串表示形式。
boolean weakCompareAndSet(boolean expect, boolean update)
如果当前值 == 预期值,则以原子方式将该值设置为给定的更新值。
AtomicInteger
多用于计数器
构造方法
AtomicInteger()
创建具有初始值 0 的新 AtomicInteger。
AtomicInteger(int initialValue)
创建具有给定初始值的新 AtomicInteger
方法
int addAndGet(int delta)
以原子方式将给定值与当前值相加。
boolean compareAndSet(int expect, int update)
如果当前值 == 预期值,则以原子方式将该值设置为给定的更新值。
int decrementAndGet()
以原子方式将当前值减 1。
double doubleValue()
以 double 形式返回指定的数值。
float floatValue()
以 float 形式返回指定的数值。
int get()
获取当前值。
int getAndAdd(int delta)
以原子方式将给定值与当前值相加。
int getAndDecrement()
以原子方式将当前值减 1。
int getAndIncrement()
以原子方式将当前值加 1。
int getAndSet(int newValue)
以原子方式设置为给定值,并返回旧值。
int incrementAndGet()
以原子方式将当前值加 1。
int intValue()
以 int 形式返回指定的数值。
void lazySet(int newValue)
最后设置为给定值。
long longValue()
以 long 形式返回指定的数值。
void set(int newValue)
设置为给定值。
String toString()
返回当前值的字符串表示形式。
boolean weakCompareAndSet(int expect, int update)
如果当前值 == 预期值,则以原子方式将该设置为给定的更新值。