博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
AtomicInteger类保证线程安全的用法
阅读量:5763 次
发布时间:2019-06-18

本文共 1098 字,大约阅读时间需要 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。

  另外其底层就是volatile和CAS 共同作用的结果:

     1.首先使用了volatile 保证了内存可见性。

     2.然后使用了CAS(compare-and-swap)算法 保证了原子性。

       其中CAS算法的原理就是里面包含三个值:内存值A  预估值V  更新值 B  当且仅当 V == A 时,V = B; 否则,不会执行任何操作。

     

转载地址:http://dfwux.baihongyu.com/

你可能感兴趣的文章
交换机端口镜像配置大全【汇集22个各种品牌交换机】
查看>>
硬件基础概念、常识集
查看>>
javadoc的命令行语法
查看>>
[转载] 王长松:传统文化与中医养生(东南大学)——第1讲 养生热背后的冷思考...
查看>>
Android Service生命周期 Service里面的onStartCommand()方法详解
查看>>
实现修改自定义展示Mysql登陆提示
查看>>
数据库开发 Oracle与mysql间的批量处理接口 SSIS+存储过程实现
查看>>
***第一天
查看>>
Java基础学习总结(5)——多态
查看>>
zabbix配置使用(一)
查看>>
Mysql学习总结(5)——MySql常用函数大全讲解
查看>>
nginx的重写功能
查看>>
我的友情链接
查看>>
几个常用的Linux操作系统监控脚本
查看>>
Java Web学习总结(9)——servlet和Jsp生命周期解读
查看>>
Java Web学习总结(2)——Servlet入门
查看>>
Oracle网络公开课《让我们捧起2014备份与恢复的世界之杯-再叙Recovery Catalog》
查看>>
关于centos没有ifcfg-eth0 ifcfg-em0
查看>>
CentOS查看和修改MySQL字符集
查看>>
C++11: std::condition_variable
查看>>