
- Java併發教程
- 併發 - 首頁
- 併發 - 概述
- 併發 - 環境搭建
- 併發 - 主要操作
- 執行緒間通訊
- 併發 - 同步
- 併發 - 死鎖
- 工具類示例
- 併發 - ThreadLocal
- 併發 - ThreadLocalRandom
- 鎖示例
- 併發 - 鎖
- 併發 - 讀寫鎖
- 併發 - 條件
- 原子變數示例
- 併發 - AtomicInteger
- 併發 - AtomicLong
- 併發 - AtomicBoolean
- 併發 - AtomicReference
- 併發 - AtomicIntegerArray
- 併發 - AtomicLongArray
- 併發 - AtomicReferenceArray
- 執行器示例
- 併發 - Executor
- 併發 - ExecutorService
- ScheduledExecutorService
- 執行緒池示例
- 併發 - newFixedThreadPool
- 併發 - newCachedThreadPool
- newScheduledThreadPool
- newSingleThreadExecutor
- 併發 - ThreadPoolExecutor
- ScheduledThreadPoolExecutor
- 高階示例
- 併發 - Futures和Callables
- 併發 - Fork-Join框架
- 併發集合
- 併發 - BlockingQueue
- 併發 - ConcurrentMap
- ConcurrentNavigableMap
- 併發實用資源
- 併發 - 快速指南
- 併發 - 有用資源
- 併發 - 討論
Java併發 - AtomicBoolean類
java.util.concurrent.atomic.AtomicBoolean 類提供對底層布林值的原子操作,可以原子地讀取和寫入,並且包含高階原子操作。AtomicBoolean 支援對底層布林變數的原子操作。它具有get和set方法,其作用類似於對易變變數的讀寫操作。也就是說,set操作與隨後對同一變數的任何get操作之間存在先行發生關係。atomic compareAndSet方法也具有這些記憶體一致性特性。
AtomicBoolean 方法
以下是AtomicBoolean類中一些重要方法的列表。
序號 | 方法及描述 |
---|---|
1 | public boolean compareAndSet(boolean expect, boolean update) 如果當前值 == 期望值,則原子地將值設定為給定的更新值。 |
2 | public boolean get() 返回當前值。 |
3 | public boolean getAndSet(boolean newValue) 原子地設定為給定值並返回前一個值。 |
4 | public void lazySet(boolean newValue) 最終設定為給定值。 |
5 | public void set(boolean newValue) 無條件設定為給定值。 |
6 | public String toString() 返回當前值的字串表示形式。 |
7 | public boolean weakCompareAndSet(boolean expect, boolean update) 如果當前值 == 期望值,則原子地將值設定為給定的更新值。 |
示例
下面的TestThread程式展示了在基於執行緒的環境中使用AtomicBoolean變數。
import java.util.concurrent.atomic.AtomicBoolean; public class TestThread { public static void main(final String[] arguments) throws InterruptedException { final AtomicBoolean atomicBoolean = new AtomicBoolean(false); new Thread("Thread 1") { public void run() { while(true) { System.out.println(Thread.currentThread().getName() +" Waiting for Thread 2 to set Atomic variable to true. Current value is " + atomicBoolean.get()); if(atomicBoolean.compareAndSet(true, false)) { System.out.println("Done!"); break; } } }; }.start(); new Thread("Thread 2") { public void run() { System.out.println(Thread.currentThread().getName() + ", Atomic Variable: " +atomicBoolean.get()); System.out.println(Thread.currentThread().getName() + " is setting the variable to true "); atomicBoolean.set(true); System.out.println(Thread.currentThread().getName() + ", Atomic Variable: " +atomicBoolean.get()); }; }.start(); } }
這將產生以下結果。
輸出
Thread 1 Waiting for Thread 2 to set Atomic variable to true. Current value is false Thread 1 Waiting for Thread 2 to set Atomic variable to true. Current value is false Thread 1 Waiting for Thread 2 to set Atomic variable to true. Current value is false Thread 2, Atomic Variable: false Thread 1 Waiting for Thread 2 to set Atomic variable to true. Current value is false Thread 2 is setting the variable to true Thread 2, Atomic Variable: true Thread 1 Waiting for Thread 2 to set Atomic variable to true. Current value is false Done!
廣告