原子性

原子操作被认为是原子性; 一个操作是 不可打断 的, 一旦开始, 就运行到结束, 就认为是原子操作, 像 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) 
          如果当前值 == 预期值,则以原子方式将该设置为给定的更新值。

results matching ""

    No results matching ""