-- Start
java.util.concurrent.atomic 包中提供了以下原子类, 它们是线程安全的类, 但是它们并不是通过同步和锁来实现的, 原子变量的操作会变为平台提供的用于并发访问的硬件原语.
- AtomicBoolean -- 原子布尔
- AtomicInteger -- 原子整型
- AtomicIntegerArray -- 原子整型数组
- AtomicLong -- 原子长整型
- AtomicLongArray -- 原子长整型数组
- AtomicReference -- 原子引用
- AtomicReferenceArray -- 原子引用数组
- AtomicMarkableReference -- 原子标记引用
- AtomicStampedReference -- 原子戳记引用
- AtomicIntegerFieldUpdater -- 用来包裹对整形 volatile 域的原子操作
- AtomicLongFieldUpdater -- 用来包裹对长整型 volatile 域的原子操作
- AtomicReferenceFieldUpdater -- 用来包裹对对象 volatile 域的原子操作
引入这些类的主要原因是为了实现一种所谓的无锁定且无等待算法. 如: 比较并交换 (CAS), 它的原理是比较当前值与期望值, 如果相同则表示该变量没有发生变化. 如下面的例子使用同步和CAS方式来实现一个ID生成器.
同步实现方式
class IDGenerator {
private int id;
public IDGenerator() {
}
public synchronized int nextInt() {
return ++id;
}
}
CAS实现方式
class IDGenerator {
private final AtomicInteger id = new AtomicInteger(0);
public IDGenerator() {
}
public int nextInt() {
while (true) {
int oldID = id.get();
int newID = oldID + 1;
if (id.compareAndSet(oldID, newID))
return newID;
}
}
}
--- 更多参见: Java 精萃
-- 声 明:转载请注明出处
-- Last Updated on 2012-07-16
-- Written by ShangBo on 2012-07-16
-- End