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=" + 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");
            }
        }
    }

 

posted on 2016-08-30 10:19  dengzy  阅读(177)  评论(0编辑  收藏  举报