原子操作被认为是原子性;
一个操作是 不可打断 的, 一旦开始, 就运行到结束, 就认为是原子操作, 像 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