concurrent.atomic包下的类AtomicInteger的使用
2017-04-18 11:02
525 查看
(尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/70225658 冷血之心的博客)
AtomicInteger可以实现用原子的方式更新int值,AtomicInteger 可用在应用程序中(如以原子方式增加的计数器),并且不能用于替换 Integer。但是,此类确实扩展了 Number,允许那些处理基于数字类的工具和实用工具进行统一访问。
先来阐述个概念:
i++操作并不是线程安全的,为什么这么说?
包含三个步骤:
拷贝i的值到临时变量
临时变量++操作
拷贝回原始变量i
不能保证原子性,所以不是线程安全的举例如下:
我们的期望结果是输出200 00 00,然而输出的肯定远远小于200 00 00 ,因为在并发下出现了线程不安全问题。
可以使用AtomicInteger解决该问题
结果如下:
如此这般,很好的解决了线程不安全的问题,Get
如果对你有帮助,记得点赞哦~欢迎大家关注我的博客,可以加群366533258交流讨论哈~
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交流讨论哈~
相关文章推荐
- java.util.concurrent.atomic.AtomicInteger使用整理与解析
- java int integer java.util.concurrent.atomic.AtomicInteger
- 从atomicInteger看concurrent
- Java之voliate, synchronized, AtomicInteger使用
- JAVA 中无锁的线程安全整数 AtomicInteger介绍和使用
- AtomicInteger的使用,多线程叠加或叠减
- AtomicInteger 在高并发量应用程序中的使用及volatile说明
- 无锁类的使用---AtomicInteger
- AtomicInteger的使用
- Java中的Atomic包使用指南:AtomicInteger、AtomicBoolean、AtomicIntegerArray、AtomicReference……
- AtomicInteger的使用
- Code Fragment-使用AtomicInteger作为线程安全的程序计数器
- Java之voliate, synchronized, AtomicInteger使用
- AtomicInteger的介绍和使用
- 10048--- AtomicInteger的介绍和使用
- Java之voliate, synchronized, AtomicInteger使用
- AtomicInteger使用
- Java之voliate, synchronized, AtomicInteger使用
- java.util.concurrent.atomic 并发包下的原子操作类(AtomicBoolean,AtomicInteger,AtomicLong......))
- Java之voliate, synchronized, AtomicInteger使用