Boolean值的變化的時候不容許在之間插入,保持操做的原子性併發
它提供了原子性操做,其中exists.compareAndSet(false, true)這個操做把比較和賦值操做組成了一個原子操做,
中間不會提供可乘之機.輸出爲this
AtomicBoolean 高效併發處理 「只初始化一次」spa
可讓一個線程等待另外一個線程完成任務後再執行: 線程
public static void main(String[] args) { Thread t2 = new Thread(new BarWorker("bb")); Thread t1 = new Thread(new BarWorker("aa")); t2.run(); t1.run(); } private static class BarWorker implements Runnable { private static AtomicBoolean exists = new AtomicBoolean(false); private String name; public BarWorker(String name) { this.name = name; } public void run() { if (exists.compareAndSet(false, true)) { // 當第一個線程設置爲true後,另外的線程是進不來的 System.out.println(name + " enter" + "currentvalue=" + exists.get()); try { System.out.println(name + " working"); Thread.sleep(2000); } catch (InterruptedException e) { // do nothing } System.out.println(name + " leave"); exists.set(false); } else { System.out.println(name + " give up"); } } }