Java 原子操作

來源:互聯網
上載者:User

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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.