zoukankan      html  css  js  c++  java
  • AtomicInteger类的简单应用

    AtomicInteger,一个提供原子操作的Integer的类。在Java语言中,++i和i++操作并不是线程安全的,在使用的时候,不可避免的会用到synchronized关键字。而AtomicInteger则通过一种线程安全的加减操作接口。

    API的常用方法

    import java.util.concurrent.atomic.AtomicInteger;
    /**
     * 来看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)

    测试类:

    package com.zslin.list.demo;
    
    import java.util.concurrent.atomic.AtomicInteger;
    
    /**
     * 
     * @author WQ<br>
     * @version 创建时间:2017年6月18日 下午3:38:59<br>
     */
    public class AtomicIntegerDemo {
        public static void main(String[] args) {
            AtomicInteger ai = new AtomicInteger(0);
            int i1 = ai.get();
            v(i1);
            int i2 = ai.getAndSet(5);
            v(i2);
            int i3 = ai.get();
            v(i3);
            int i4 = ai.getAndIncrement();
            v(i4);
            v(ai.get());
    
        }
    
        static void v(int i) {
            System.out.println("i : " + i);
        }
    }

    运行结果:

    i : 0
    i : 0
    i : 5
    i : 5
    i : 6

    结合上面的示例,可以得到如下结果:

    首先看两段代码,一段是Integer的,一段是AtomicInteger的,为以下:
    
    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();
        }
    
    }

    上面效果是一样的。

    AtomicInteger使用总结

    AtomicInteger是在使用非阻塞算法实现并发控制,在一些高并发程序中非常适合,但并不能每一种场景都适合,不同场景要使用使用不同的数值类。

  • 相关阅读:
    日期型数据知识
    如何让VS检查函数和类Comment的添加情况
    HTTP request is unauthorized with client authentication scheme 'Anonymous'.
    将SerializableAttribute序列化为xml
    使用EnterpriseLibrary Validation Block对WCF做验证
    表达式树中递归方法
    使用SignalR在Asp.net中实现进度条
    SQLServer中列出数据库的所有表的创建时间
    用Knockoutjs与Asp.net MVC实现级联下拉列表
    使用UnityAutoMoq简化单元测试
  • 原文地址:https://www.cnblogs.com/mr-wuxiansheng/p/7044457.html
Copyright © 2011-2022 走看看