概述
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所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复