
- Java 併發教程
- 併發 - 首頁
- 併發 - 概述
- 併發 - 環境設定
- 併發 - 主要操作
- 執行緒間通訊
- 併發 - 同步
- 併發 - 死鎖
- 實用類示例
- 併發 - ThreadLocal
- 併發 - ThreadLocalRandom
- 鎖示例
- 併發 - Lock
- 併發 - ReadWriteLock
- 併發 - Condition
- 原子變數示例
- 併發 - AtomicInteger
- 併發 - AtomicLong
- 併發 - AtomicBoolean
- 併發 - AtomicReference
- 併發 - AtomicIntegerArray
- 併發 - AtomicLongArray
- 併發 - AtomicReferenceArray
- 執行器示例
- 併發 - Executor
- 併發 - ExecutorService
- ScheduledExecutorService
- 執行緒池示例
- 併發 - newFixedThreadPool
- 併發 - newCachedThreadPool
- newScheduledThreadPool
- newSingleThreadExecutor
- 併發 - ThreadPoolExecutor
- ScheduledThreadPoolExecutor
- 高階示例
- 併發 - Futures 和 Callables
- 併發 - Fork-Join 框架
- 併發集合
- 併發 - BlockingQueue
- 併發 - ConcurrentMap
- ConcurrentNavigableMap
- 併發實用資源
- 併發 - 快速指南
- 併發 - 有用資源
- 併發 - 討論
Java 併發 - AtomicLong 類
java.util.concurrent.atomic.AtomicLong 類提供對底層 long 值的操作,這些操作可以原子地讀取和寫入,並且還包含高階原子操作。AtomicLong 支援對底層 long 變數的原子操作。它具有 get 和 set 方法,這些方法的工作方式類似於對 volatile 變數的讀取和寫入。也就是說,set 與隨後對同一變數的任何 get 之間存在 happens-before 關係。atomic compareAndSet 方法也具有這些記憶體一致性特性。
AtomicLong 方法
以下是 AtomicLong 類中可用的一些重要方法。
序號 | 方法及描述 |
---|---|
1 | public long addAndGet(long delta) 原子地將給定值新增到當前值。 |
2 | public boolean compareAndSet(long expect, long update) 如果當前值與預期值相同,則原子地將值設定為給定的更新值。 |
3 | public long decrementAndGet() 原子地將當前值減 1。 |
4 | public double doubleValue() 將指定數字的值作為 double 返回。 |
5 | public float floatValue() 將指定數字的值作為 float 返回。 |
6 | public long get() 獲取當前值。 |
7 | public long getAndAdd(long delta) 原子地將給定值新增到當前值。 |
8 | public long getAndDecrement() 原子地將當前值減 1。 |
9 | public long getAndIncrement() 原子地將當前值加 1。 |
10 | public long getAndSet(long newValue) 原子地設定為給定值並返回舊值。 |
11 | public long incrementAndGet() 原子地將當前值加 1。 |
12 | public int intValue() 將指定數字的值作為 int 返回。 |
13 | public void lazySet(long newValue) 最終設定為給定值。 |
14 | public long longValue() 將指定數字的值作為 long 返回。 |
15 | public void set(long newValue) 設定為給定值。 |
16 | public String toString() 返回當前值的字串表示形式。 |
17 | public boolean weakCompareAndSet(long expect, long update) 如果當前值與預期值相同,則原子地將值設定為給定的更新值。 |
示例
以下 TestThread 程式展示了在基於執行緒的環境中使用 AtomicLong 安全實現計數器的示例。
import java.util.concurrent.atomic.AtomicLong; public class TestThread { static class Counter { private AtomicLong c = new AtomicLong(0); public void increment() { c.getAndIncrement(); } public long value() { return c.get(); } } public static void main(final String[] arguments) throws InterruptedException { final Counter counter = new Counter(); //1000 threads for(int i = 0; i < 1000 ; i++) { new Thread(new Runnable() { public void run() { counter.increment(); } }).start(); } Thread.sleep(6000); System.out.println("Final number (should be 1000): " + counter.value()); } }
這將產生以下結果。
輸出
Final number (should be 1000): 1000