美文网首页java
Java中AtomicInteger

Java中AtomicInteger

作者: HachiLin | 来源:发表于2022-06-13 21:10 被阅读0次

    1. 介绍

      在Java语言中,++i和i++操作都不是线程安全的,在使用的时候,不可避免的会用到synchronized关键字。AtomicInteger,命名带有Atomic,很明显本身是原子性。这个类常是线程安全,多用于高并发对数据的修改。

    2. 使用

    • 例子
    import java.util.concurrent.atomic.AtomicInteger;
    @Test
    public void use AtomicInteger() {
        AtomicInteger integer = new AtomicInteger(0);
        System.out.println(integer.get());
        integer.set(1); 
        int i = integer.get(); //获得值
        System.out.println(i + "\n" + "------------------");
    
        integer.set(2);
        i = integer.incrementAndGet(); //先+1,然后在返回值,相当于++i
        System.out.println(i);
        i = integer.get();
        System.out.println(i + "\n" + "------------------");
    
        integer.set(3);
        i = integer.getAndIncrement(); //先返回值,然后在+1,相当于i++
        System.out.println(i);
        i = integer.get();
        System.out.println(i + "\n" + "------------------");
    
        integer.set(4);
        i = integer.decrementAndGet();//先-1,然后在返回值,相当于--i
        System.out.println(i);
        i = integer.get();
        System.out.println(i + "\n" + "------------------");
    
        integer.set(5);
        i = integer.getAndDecrement();//先返回值,然后在-1,相当于i--
        System.out.println(i);
        i = integer.get();
        System.out.println(i + "\n" + "------------------");
    
        integer.set(6);
        i = integer.addAndGet(1); //先+n,然后在返回值,
        System.out.println(i);
        i = integer.get();
        System.out.println(i + "\n" + "------------------");
    
        integer.set(7);
        i = integer.getAndAdd(1); //先返回,然后+n
        System.out.println(i);
        i = integer.get();
        System.out.println(i + "\n" + "------------------");
    }
    
    • 输出
    0
    1
    ------------------
    3
    3
    ------------------
    3
    4
    ------------------
    3
    3
    ------------------
    5
    4
    ------------------
    7
    7
    ------------------
    7
    8
    ------------------
    

    3. 原子性例子

    public class TestAtomicInteger {
        static int i = 0;
        static AtomicInteger a=new AtomicInteger(0);
        static class MyThread implements Runnable {
             synchronized public void run() {
                for (int m = 0; m < 1000; m++) {
                    a.getAndIncrement();
                       i++;
                }
            }
        };
    
        public static void main(String[] args) throws Exception {
              MyThread m = new MyThread();
              Thread t1 = new Thread(m);
              Thread t2 = new Thread(m);
              t1.start();
              t2.start();
              System.out.println(i);
              System.out.println(a.get());
        }
    }
    
    • 输出
    加synchronized 输出结果
    2000
    2000
    不加synchronized 输出结果
    1986
    2000
    

    4. 参考

    相关文章

      网友评论

        本文标题:Java中AtomicInteger

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