concurrent.atomic包下的类AtomicInteger的使用
来源:互联网 发布:网络营销效果优化研究 编辑:程序博客网 时间:2024/04/30 01:10
(尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/70225658 冷血之心的博客)
AtomicInteger可以实现用原子的方式更新int值,AtomicInteger 可用在应用程序中(如以原子方式增加的计数器),并且不能用于替换 Integer。但是,此类确实扩展了 Number,允许那些处理基于数字类的工具和实用工具进行统一访问。
先来阐述个概念:
i++操作并不是线程安全的,为什么这么说?
包含三个步骤:
- 拷贝i的值到临时变量
- 临时变量++操作
- 拷贝回原始变量i
不能保证原子性,所以不是线程安全的
举例如下:
package package1;class MyThread implements Runnable { static int i = 0; public void run() { for (int m = 0; m < 1000000; m++) { i++; } }};public class Test { public static void main(String[] args) throws InterruptedException { MyThread mt = new MyThread(); Thread t1 = new Thread(mt); Thread t2 = new Thread(mt); t1.start(); t2.start(); Thread.sleep(500); System.out.println(MyThread.i); }}
我们的期望结果是输出200 00 00,然而输出的肯定远远小于200 00 00 ,因为在并发下出现了线程不安全问题。
可以使用AtomicInteger解决该问题
package package1;import java.util.concurrent.atomic.AtomicInteger;class MyThread implements Runnable { static AtomicInteger ai=new AtomicInteger(0); public void run() { for (int m = 0; m < 1000000; m++) { ai.getAndIncrement(); } }};public class Test { public static void main(String[] args) throws InterruptedException { MyThread mt = new MyThread(); Thread t1 = new Thread(mt); Thread t2 = new Thread(mt); t1.start(); t2.start(); Thread.sleep(500); System.out.println(MyThread.ai.get()); }}
结果如下:
如此这般,很好的解决了线程不安全的问题,Get
如果对你有帮助,记得点赞哦~欢迎大家关注我的博客,可以加群366533258交流讨论哈~
1 1
- concurrent.atomic包下的类AtomicInteger的使用
- java.util.concurrent.atomic 并发包下的原子操作类(AtomicBoolean,AtomicInteger,AtomicLong......))
- 推荐使用concurrent包中的Atomic类
- java.util.concurrent.atomic.AtomicInteger使用整理与解析
- java.util.concurrent.atomic的正确使用
- java.util.concurrent(JUC)的研究--》atomic原子操作--》从AtomicInteger开始
- java.util.concurrent.atomic.AtomicInteger(Atomic详解)
- Atomic包下的类分析
- 关于java.util.concurrent.atomic.*包下面的线程问题
- JDK1.8的Java.util.concurrent.atomic包小结
- java.util.concurrent.atomic 类包详解
- java concurrent包下CyclicBarrier的初步使用
- concurrent包下的blockingQueue的学习
- 传智播客-多线程(6)-jdk5里的concurrent与atomic包
- 使用util.concurrent并发包下的工具类,实现实时通知对方线程
- concurrent包:java.util.concurrent.atomic
- java int integer java.util.concurrent.atomic.AtomicInteger
- java.util.concurrent 包下常用的类
- ubuntu下运行ROS时碰到的时间问题
- 隐藏标题栏状态栏的办法
- 区块链技术开发发展到现在用途都在哪些方面
- SuperMap iServer MongoDB分布式切图缓存迁移
- codeforces676C Vasya and String
- concurrent.atomic包下的类AtomicInteger的使用
- NPAPI插件运行流程分析
- Android 4.0 Launcher2源码分析——导入eclipse进行调试
- 有关网络协议的一点学习
- Gradle for Android 第二篇( Build.gradle入门 )
- sleep() 和 wait() 有什么区别?
- JSON.parse()和JSON.stringify()
- 是什么让C#成为最值得学习的编程语言
- mysql 全备份和导入备份