美文网首页Spring学习
AtomicBoolean的快速通俗理解

AtomicBoolean的快速通俗理解

作者: 微世界的码虫 | 来源:发表于2020-03-27 09:41 被阅读0次

    今天偶然学习了AtomicBoolean 这个类,他是线程安全的,它的compareAndSet方法是利用CAS来实现线程安全的,至于CAS这里不多说。 推荐某简书大牛的文章:https://www.jianshu.com/p/fb6e91b013cc 

    它的两种用法: 

    1.保证某段语句只执行一次。 首先我们要知道compareAndSet的作用,判断对象当时内部值是否为第一个参数,如果是则更新为第二个参数,且返回ture,否则返回false。那么默认初始化为false,则一个线程把他变为ture,compareAndSet返回ture,进入方法体执行逻辑,那么其他的任何线程进入该方法执行compareAndSet时第一个参数为false,而对象的内部值已经被修改为true,则永远过不了if。 private static AtomicBoolean initialized = new AtomicBoolean(false); public void init() { if( initialized.compareAndSet(false, true) ) { // 这里放置初始化代码.... } } 

    2.保证该方法只有一个线程执行,类似于锁的操作 参考一,init方法只执行1次,那么方法执行结束的时候我把对象的值变成false,compareAndSet可以继续可以将对象则的值设置成true,返回true。 

    @Override public void run() { 

        if (exists.compareAndSet(false, true)) { 

            exists.set(false); 

    } else {

     System.out.println(name + " give up"); 

    }

    相关文章

      网友评论

        本文标题:AtomicBoolean的快速通俗理解

        本文链接:https://www.haomeiwen.com/subject/dtgkuhtx.html