zoukankan      html  css  js  c++  java
  • 六、atomic

    在java.util.concurrent.atomic提供了一下关于原子操作的类,这些类包括:AtomicLong、AtomicInteger、AtomicBoolean。以及对数组操作的AtomicIntegerArray、AtomicLongArray。

    线程的初步认识的Demo2,因为原子操作导致的安全问题。使用AtomicInteger就可以得到解决。

    public class Demo2 {
        private AtomicInteger value = new AtomicInteger(1);
    
        public int getNext(){
            //   value 的值进行加1,然后返回,整个操作为一个原子操作。
            return value.getAndIncrement();
        }
    
        public static void main(String[] args) {
            final Demo2 demo = new Demo2();
            Runnable r = new Runnable() {
                @Override
                public void run() {
                    System.out.println(demo.getNext());
                }
            };
    
    
            for(int i = 0 ;i <500;i++){
                new Thread(r).start();
            }
        }
    
    }
    AtomicInteger的构造方法:

    AtomicInteger() 创建具有初始值 0 的新 AtomicInteger。
    AtomicInteger(int initialValue) 创建具有给定初始值的新 AtomicInteger。

    常用的方法

    int get()  得到当前值。
    int getAndDecrement()  以原子方式将当前值减 1。
    int getAndIncrement()  以原子方式将当前值加 1。
    int incrementAndGet() 以原子方式将当前值加 1。
    int decrementAndGet() 以原子方式将当前值减 1。
    int addAndGet(int delta) 以原子方式将给定值与当前值相加。
    int getAndAdd(int delta) 以原子方式将给定值与当前值相加。

    注:getAndXXX和XXXAndGet的区别参考:++ i 和 i++。

    AtomicLong、AtomicInteger、AtomicBoolean的用法类似。

    下面为AtomicIntegerArray的示例,AtomicLongArray的用法类似。

    public class AtomicIntegerArrayTest {
    
            public static void main(String[] args) {
                int [] a = {1,2,3};
                //根据给定数组创建一个AtomicIntegerArray对象,下面所有操作实际上都是在以原子操作操作该数组。
                AtomicIntegerArray ala  = new AtomicIntegerArray(a);
                //对第0个元素进行加1操作,并返回值
                System.out.println(ala.incrementAndGet(0));
                //对第1个元素进行加4操作,并返回值
                System.out.println(ala.addAndGet(1, 4));
                //对第2个元素进行减1操作,并返回值
                System.out.println(ala.decrementAndGet(2));
                //对第1个元素进行减2操作,并返回值
                System.out.println(ala.addAndGet(1, -2));
            }
    }
  • 相关阅读:
    c ++ auto 的使用
    poj 3169 Layout
    1076 Forwards on Weibo (30)(30 分)
    Zookeeper注册节点的掉线自动重新注册及测试方法
    ZooKeeper(3.4.5) 使用Curator监听事件
    Nginx 引入线程池,提升 9 倍性能
    面试总结 地址
    struts2原理
    struts2拦截器与过滤器
    java网络编程serversocket
  • 原文地址:https://www.cnblogs.com/futiansu/p/5615809.html
Copyright © 2011-2022 走看看