thread_AtomicBoolean

 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");
            }
        }
    }
本站公眾號
   歡迎關注本站公眾號,獲取更多信息