Java的多线程编程模型5--从AtomicInteger开始
来源:互联网 发布:elona linux 编辑:程序博客网 时间:2024/06/06 02:48
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的方法来进行测试,直观的感受下性能上的差异
结果
time elapse:31
time elapse:16
由此不难看出,通过JNI本地的CAS性能远超synchronized关键字
Reference
http://stackoverflow.com/questions/2443239/java-atomicinteger-what-are-the-differences-between-compareandset-and-weakcompar
- Java的多线程编程模型5--从AtomicInteger开始
- Java的多线程编程模型5--从AtomicInteger开始
- Java的多线程编程模型5--从AtomicInteger开始(自增长实现)
- Java的多线程编程模型之AtomicInteger
- java.util.concurrent(JUC)的研究--》atomic原子操作--》从AtomicInteger开始
- 【Java多线程】AtomicInteger使用
- Java的多线程编程模型5--Java中的CAS理论
- 编程从Java开始
- Java的多线程编程模型4--synchronized
- java 多线程 AtomicInteger原子变量
- 多线程之AtomicInteger的使用
- Java并发编程(1)-AtomicInteger
- Java并发编程AtomicInteger&CAS
- volatile AtomicInteger java多线程操作 原子性
- Java的多线程编程模型2--怎样才线程安全
- Java的多线程编程模型2--怎样才线程安全
- 从java多线程内存模型说到ConcurrentHashMap
- AtomicInteger的java详细文档
- COM三大接口 -> IUnknown、IClassFactory、IDispatch
- 线性表 -- 链式存储结构(单链表)
- Java技术平台中文处理问题分析及解决方案
- 转帖: 信号与系统参考书
- 如何获得IE版本
- Java的多线程编程模型5--从AtomicInteger开始
- 数据库设计中的14个技巧
- 【观点】如何成为Python高手
- SQL语句优化技术分析
- Oracle的分页查询
- 线程与消息队列
- Asynchronous Method Invocation 【翻译】 (三)
- linux操作系统基础概念(一) 地址、空间
- jQuery数组处理汇总