AtomicInteger介绍
2016-02-17 12:34
253 查看
一.概述
AtomicInteger是JDK1.5提供的一个支持原子操作的 Integer 类,就是保证对AtomicInteger类型变量的增加和减少操作是原子性的,不会出现多个线程下的数据不一致问题。如果不使用 AtomicInteger,要实现一个按顺序获取的 ID,就必须在每次获取时进行加锁操作,以避免出现并发时获取到同样的 ID 的现象。在Java语言中,++i和i++操作并不是线程安全的,在使用的时候,不可避免的会用到synchronized关键字。而AtomicInteger则通过一种线程安全的加减操作接口。二.实例
下面通过简单的两个例子的对比来看一下 AtomicInteger 的强大的功能[code] class Counter1 { private volatile int count = 0; public synchronized void increment() { count++; // 若要线程安全执行执行count++,需要加锁 } public int getCount() { return count; } } class Counter2 { private AtomicInteger count = new AtomicInteger(); public void increment() { count.incrementAndGet(); } // 使用AtomicInteger之后,不需要加锁,也可以实现线程安全。 public int getCount() { return count.get(); } }
从上面的例子中我们可以看出:使用AtomicInteger是非常的安全的
那么为什么不使用记数器自加呢,例如count++这样的,因为这种计数是线程不安全的,高并发访问时统计会有误,而AtomicInteger为什么能够达到多而不乱,处理高并发应付自如呢?
这是由硬件提供原子操作指令实现的。在非激烈竞争的情况下,开销更小,速度更快。Java.util.concurrent中实现的原子操作类包括:
AtomicBoolean、AtomicInteger、AtomicLong、AtomicReference。
相关文章推荐
- 手机支付宝扫一扫 给郝萌主捐赠
- 使用gulp在开发过程中合理导出zip文件
- 强连通分量总结
- python 批量关注好友
- 三幅地图管窥中国在一体化的世界上的地位
- vijos P1459 车展(Treap,中位数)
- Unity3d 协程讲解
- UML学习笔记(一)
- android textView添加不同颜色的边框
- 1102. Invert a Binary Tree (25)
- 修饰符的概述和总结
- 形式参数和返回值的问题深入研究
- android用eclipse 开发出现CreateActivty select actvity type 下一片空白
- PL/SQL异常
- PL/SQL异常
- 共享是种美德,共享也是自我进步的捷径,共享更是合作的开始。
- 【JSTL】--格式化日期--drp217
- Object
- Mybatis的逆向工程
- Detect Mobile Browsers | Open source mobile phone detection