原子操作被认为是原子性;
一个操作是 不可打断 的, 一旦开始, 就运行到结束, 就认为是原子操作, 像 a=0, 只有一个操作, 不可打断, 认为是原子操作, 还有一些语句块, 用 sychronized 加锁后, 也可认为是原子操作;
java 提供了位于包 java.util.concurrent.atomic 中的原子类, 使用该工具包中的原子类, 可在不加锁的情况下对单个变量安全的进行多线程编程;
包中的类
| 1 2 3 4 5 6 7 8 9 10 11 12 13 | 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
多用于标志变量
构造方法
| 1 2 3 4 5 | AtomicBoolean()            使用初始值 false 创建新的 AtomicBoolean。 AtomicBoolean(boolean initialValue)            使用给定的初始值创建新的 AtomicBoolean。 | 
方法
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 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
多用于计数器
构造方法
| 1 2 3 4 5 | AtomicInteger()            创建具有初始值 0 的新 AtomicInteger。 AtomicInteger(int initialValue)            创建具有给定初始值的新 AtomicInteger | 
方法
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | 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)            如果当前值 == 预期值,则以原子方式将该设置为给定的更新值。 | 
 
	
0 Comments