首页 > 代码库 > thread_AtomicBoolean

thread_AtomicBoolean

 Boolean值的变化的时候不允许在之间插入,保持操作的原子性

它提供了原子性操作,其中exists.compareAndSet(false, true)这个操作把比较和赋值操作组成了一个原子操作,
中间不会提供可乘之机.输出为

AtomicBoolean 高效并发处理 “只初始化一次”

可以让一个线程等待另一个线程完成任务后再执行: 

    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="http://www.mamicode.com/+ 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");            }        }    }

 

thread_AtomicBoolean