zoukankan      html  css  js  c++  java
  • AtomicInteger类的理解与使用

    对比Integer和AtomicInteger

    Integer:

    public class Sample1 {
    
        private static Integer count = 0;
    
        synchronized public static void increment() {
            count++;
        }
    
    }
    

     AtomicInteger:

    public class Sample2 {
    
        private static AtomicInteger count = new AtomicInteger(0);
    
        public static void increment() {
            count.getAndIncrement();
        }
    
    }

    以上两段代码,在使用Integer的时候,必须加上synchronized保证不会出现并发线程同时访问的情况,而在AtomicInteger中却不用加上synchronized,在这里AtomicInteger是提供原子操作的

    AtomicInteger

    AtomiciInteger提供一个原子操作的Integer类,线程安全的方式进行加减

    场景:适用于高并发

    源码:

    ublic class AtomicInteger extends Number implements java.io.Serializable {
        private static final long serialVersionUID = 6214790243416807050L;
    
        // setup to use Unsafe.compareAndSwapInt for updates
        private static final Unsafe unsafe = Unsafe.getUnsafe();
        private static final long valueOffset;
    
        static {
            try {
                valueOffset = unsafe.objectFieldOffset
                    (AtomicInteger.class.getDeclaredField("value"));
            } catch (Exception ex) { throw new Error(ex); }
        }
    
        private volatile int value;
    

      volatile防止VM进行指令重排,使得多个线程可以共享变量,但是时VM降低了优化。

    常用接口:

    /**
     * 来看AtomicInteger提供的接口。

     //获取当前的值
     
     public final int get()
     
     //取当前的值,并设置新的值
     
      public final int getAndSet(int newValue)
     
     //获取当前的值,并自增
     
      public final int getAndIncrement() 
     
     //获取当前的值,并自减
     
     public final int getAndDecrement()
     
     //获取当前的值,并加上预期的值
     
     public final int getAndAdd(int delta) 

  • 相关阅读:
    iOS6和iOS7代码的适配(3)——坐标适配
    iOS6和iOS7代码的适配(2)——status bar
    iOS6和iOS7代码的适配(1)
    深入Blocks分析
    文字溢出加省略号
    点击图表每一部分触发某事件
    图表添加红线
    比较月份是否存在封装数据
    云上示范区项目总结
    页面之间通过地址栏传参
  • 原文地址:https://www.cnblogs.com/L-a-u-r-a/p/8493407.html
Copyright © 2011-2022 走看看