-- 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