码迷,mamicode.com
首页 > 其他好文 > 详细

thread_AtomicBoolean

时间:2016-08-30 10:52:51      阅读:102      评论:0      收藏:0      [点我收藏+]

标签:

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

 

thread_AtomicBoolean

标签:

原文地址:http://www.cnblogs.com/dengzy/p/5818953.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!