zoukankan      html  css  js  c++  java
  • AtomicBoolean

    它的两种用法:

         1.保证某段语句只执行一次。

           首先我们要知道compareAndSet的作用,判断对象当时内部值是否为第一个参数,如果是则更新为第二个参数,且返回ture,否则返回false。那么默认初始化为false,则一个线程把他变为ture,compareAndSet返回ture,进入方法体执行逻辑,那么其他的任何线程进入该方法执行compareAndSet时第一个参数为false,而对象的内部值已经被修改为true,则永远过不了if。

    AtomicBoolean called = new AtomicBoolean(false);
    
                final Envelope self = this;
                TimeoutTaskReceipt timeoutTaskReceipt = thdf.submitTimeoutTask(new Runnable() {
                    @Override
                    public void run() {
                        self.timeout();
                    }
                }, TimeUnit.MILLISECONDS, msg.getTimeout());
    
                @Override
                public void ack(MessageReply reply) {
                    count(msg);
    
                    envelopes.remove(msg.getId());
    
                    if (!called.compareAndSet(false, true)) {
                        return;
                    }
    
                    timeoutTaskReceipt.cancel();
    
                    callback.run(reply);
                }
    

      

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

      

  • 相关阅读:
    在centos上搭建Git服务器
    glog日志库移植Android平台
    水葱
    路易斯安娜鸢尾
    再力花
    矮生百慕大
    洒金珊瑚
    八角金盘
    锦绣杜鹃
    茶梅球
  • 原文地址:https://www.cnblogs.com/zqyanywn/p/10150532.html
Copyright © 2011-2022 走看看