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