博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
AtomicInteger和count++的比较
阅读量:7026 次
发布时间:2019-06-28

本文共 986 字,大约阅读时间需要 3 分钟。

J2SE 5.0提供了一组atomic class来帮助我们简化同步处理。基本工作原理是使用了同步synchronized的方法实现了对一个long, integer, 对象的增、减、赋值(更新)操作. 比如对于++运算符AtomicInteger可以将它持有的integer 能够atomic 地递增。在需要访问两个或两个以上 atomic变量的程序代码(或者是对单一的atomic变量执行两个或两个以上的操作)通常都需要被synchronize以便两者的操作能够被当作是一个atomic的单元。

java多线程用法-使用AtomicInteger
下面通过简单的两个例子的对比来看一下 AtomicInteger 的强大的功能
 
class Counter {private volatile int count = 0;public synchronized void increment() {count++;  //若要线程安全执行执行count++,需要加锁}public int getCount() {return count;}}class Counter {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。

转载于:https://www.cnblogs.com/zhaoyan001/p/6585961.html

你可能感兴趣的文章
svn服务器时间与本地时间不同步解决
查看>>
postgres10.2时区研究
查看>>
ie9以下不支持html5 解决方法
查看>>
JAVA异常体系
查看>>
C#'~'按位取反运算符的使用
查看>>
HTTP协议
查看>>
防止SQL注入
查看>>
java.io几种读写文件的方式
查看>>
jquery 点击查看,收起特效
查看>>
JS自学笔记05
查看>>
SQL Server参数化查询中应用Like
查看>>
如何用弹出窗口显示进度
查看>>
mysql优化
查看>>
自动化常识
查看>>
js实现倒计时
查看>>
C#保存文件为无BOM的utf8格式
查看>>
MVC、MVP以及MVVM分析
查看>>
解决Android Studio 错误方法
查看>>
kindeditor用法简单介绍
查看>>
bson.errors.InvalidStringData: strings in documents must be valid UTF-8
查看>>