thread_AtomicBoolean

Posted 上善若水

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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");
            }
        }
    }

 

以上是关于thread_AtomicBoolean的主要内容,如果未能解决你的问题,请参考以下文章

VSCode自定义代码片段——CSS选择器

谷歌浏览器调试jsp 引入代码片段,如何调试代码片段中的js

片段和活动之间的核心区别是啥?哪些代码可以写成片段?

VSCode自定义代码片段——.vue文件的模板

VSCode自定义代码片段6——CSS选择器

VSCode自定义代码片段——声明函数