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的方法来进行测试,直观的感受下性能上的差异

最新文章

  1. 汇编实现点亮Led灯(2440)
  2. win下修改mysql默认的字符集以防止乱码出现
  3. JAVA面向对象程序设计——实验报告
  4. python 从文件导入分类
  5. AngularJS快速入门指南11:事件
  6. AngularJs中的服务
  7. 当数据0跟if判断冲突的时候
  8. java路径问题总结
  9. Intent(二)
  10. 《转》JAVA中PriorityQueue优先级队列使用方法
  11. hdu 4119 Isabella's Message
  12. alibaba远程调用框架dubbo原理
  13. ZooKeeper集群与Leader选举
  14. git命令之git remote的用法
  15. 跨域学习笔记1--跨域调用webapi
  16. 《机器学习实战(基于scikit-learn和TensorFlow)》第二章内容的学习心得
  17. Jupyter Notebook入门教程
  18. Mayi_Maven安装与配置Myeclipse、Idea
  19. snmpv3-snmpd.conf解析
  20. thinkphp3.2笔记(3)视图渲染 模板的赋值与显示 系统变量

热门文章

  1. dapper的增、删、查改的CodeSmith模板
  2. [zz] JIT&HotSpot
  3. [程序人生]前途无"亮‘’的大学
  4. Selenium&EmguCV实现爬虫图片识别
  5. jQuery waterbubble 水球图
  6. android XMl 解析神奇xstream 五: 把复杂对象转换成 xml ,并写入SD卡中的xml文件
  7. IOS 网络浅析-(十三 SDWebImage 实用技巧)
  8. 怎么向Xcode6 IOS8之后向项目中添加预编译文件
  9. iOS网络-02-数据解析(JSON与XML)
  10. 提示“正尝试安装的adobe flash player不是最新版本”的解决方法