Java AtomicInteger
AtomicInteger,一个提供原子操作的Integer的类。在Java语言中,++i和i++操作并不是线程安全的,在使用的时候,不可避免的会用到synchronized关键字。而AtomicInteger则通过一种线程安全的加减操作接口。
来看AtomicInteger提供的接口。
//获取当前的值
public final int get()
//取当前的值,并设置新的值
public final int getAndSet(int newValue)
//获取当前的值,并自增
public final int getAndIncrement()
//获取当前的值,并自减
public final int getAndDecrement()
//获取当前的值,并加上预期的值
public final int getAndAdd(int delta)
... ...
我们在上一节提到的CAS主要是这两个方法
public final boolean compareAndSet(int expect, int update) {
return unsafe.compareAndSwapInt(this, valueOffset, expect, update);
}
public final boolean weakCompareAndSet(int expect, int update) {
return unsafe.compareAndSwapInt(this, valueOffset, expect, update);
}
这两个方法是名称不同,但是做的事是一样的,可能在后续的java版本里面会显示出区别来。
详细查看会发现,这两个接口都是调用一个unsafe的类来操作,这个是通过JNI实现的本地方法,细节就不考虑了。
下面是一个对比测试,我们写一个synchronized的方法和一个AtomicInteger的方法来进行测试,直观的感受下性能上的差异
最新文章
- 汇编实现点亮Led灯(2440)
- win下修改mysql默认的字符集以防止乱码出现
- JAVA面向对象程序设计——实验报告
- python 从文件导入分类
- AngularJS快速入门指南11:事件
- AngularJs中的服务
- 当数据0跟if判断冲突的时候
- java路径问题总结
- Intent(二)
- 《转》JAVA中PriorityQueue优先级队列使用方法
- hdu 4119 Isabella's Message
- alibaba远程调用框架dubbo原理
- ZooKeeper集群与Leader选举
- git命令之git remote的用法
- 跨域学习笔记1--跨域调用webapi
- 《机器学习实战(基于scikit-learn和TensorFlow)》第二章内容的学习心得
- Jupyter Notebook入门教程
- Mayi_Maven安装与配置Myeclipse、Idea
- snmpv3-snmpd.conf解析
- thinkphp3.2笔记(3)视图渲染 模板的赋值与显示 系统变量
热门文章
- dapper的增、删、查改的CodeSmith模板
- [zz] JIT&;HotSpot
- [程序人生]前途无";亮‘’的大学
- Selenium&;EmguCV实现爬虫图片识别
- jQuery waterbubble 水球图
- android XMl 解析神奇xstream 五: 把复杂对象转换成 xml ,并写入SD卡中的xml文件
- IOS 网络浅析-(十三 SDWebImage 实用技巧)
- 怎么向Xcode6 IOS8之后向项目中添加预编译文件
- iOS网络-02-数据解析(JSON与XML)
- 提示“正尝试安装的adobe flash player不是最新版本”的解决方法