我是靠谱客的博主 魁梧老虎,最近开发中收集的这篇文章主要介绍Java中AtomicInteger,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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. 参考

  • https://www.cnblogs.com/sharkli/p/5623524.html
  • https://www.cnblogs.com/chuangzhijian/p/7301212.html
  • https://blog.csdn.net/weixin_34133829/article/details/85897545

最后

以上就是魁梧老虎为你收集整理的Java中AtomicInteger的全部内容,希望文章能够帮你解决Java中AtomicInteger所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(58)

评论列表共有 0 条评论

立即
投稿
返回
顶部