一、AtomicBoolean類介紹
java.util.concurrent.atomic.AtomicBoolean類提供了可以原子讀取和寫入的底層布爾值的操作,並且還包含高級原子操作。 AtomicBoolean支持基礎布爾變量上的原子操 作。 它具有獲取和設置方法,如在volatile變量上的讀取和寫入。 也就是說,一個集合與同一變量上的任何后續get相關聯。 原子compareAndSet方法也具有這些內存一致性功能。
二、tomicBoolean類中的方法
以下是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() |
返回當前值的String表示形式。 |
| 7 | public boolean weakCompareAndSet(boolean expect, boolean update) |
如果當前值==期望值,則將該值原子設置為給定的更新值。 |
以下程序顯示了基於線程的環境中AtomicBoolean變量的使用。
1 package testAtomicBoolean; 2 3 import java.util.concurrent.TimeUnit; 4 5 public class mainWork { 6 public static void main(final String[] arg) throws InterruptedException{ 7 Work work = new Work(); 8 work.start(); 9 TimeUnit.SECONDS.sleep(1); //暫停一秒 10 work.stop(); 11 } 12 }
1 package testAtomicBoolean; 2 3 import java.util.concurrent.atomic.AtomicBoolean; 4 5 public class Work { 6 private AtomicBoolean flag; 7 8 public Work() { 9 this.flag = new AtomicBoolean(false);//通過構造函數加載時賦值(默認false) 10 } 11 12 /** 13 * 啟動線程 14 */ 15 public void start() { 16 //方法一 17 /*if(!flag.get()) {//get()返回當前值 18 synchronized(flag){ 19 flag.set(true);//設定給定制 20 System.out.println("Work------開始執行!"); 21 } 22 }else { 23 System.out.println("Work之前已經開始了!"); 24 }*/ 25 //方法二 26 System.out.println("flag修改前值------"+flag.get()); 27 if(flag.compareAndSet(false, true)) { 28 System.out.println("Work------開始執行!"); 29 System.out.println("flag修改后值------"+flag.get()); 30 } 31 } 32 33 /** 34 * 停止線程 35 */ 36 public void stop() { 37 if(flag.get()) {//get()返回當前值 38 synchronized(flag){ 39 System.out.println("Work------已經停止!"); 40 flag.set(false);//設定給定制 41 } 42 }else { 43 System.out.println("Work之前已經停止了!"); 44 } 45 } 46 }
運行結果:flag修改前值------false
Work------開始執行!
flag修改后值------true
Work------已經停止!
注:學習之旅,如有不正確,多多指教。
