java AtomicInteger 类学习
来源:互联网 发布:中学生网络安全教育 编辑:程序博客网 时间:2024/05/16 10:04
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)
... ...
首先说一下volatile:
Volatile修饰的成员变量在每次被线程访问时,都强迫从共享内存重新读取该成员的值,而且,当成员变量值发生变化时,强迫将变化的值重新写入共享内存,这样两个不同的线程在访问同一个共享变量的值时,始终看到的是同一个值。
而AtomicInteger也是定义的volatile类型:
private volatile int value;
下面是一个对比测试,我们写一个synchronized的方法和一个AtomicInteger的方法来进行测试,直观的感受下性能上的差异
import java.util.concurrent.atomic.AtomicInteger;
public class AtomicIntegerCompareTest {
private int value;
public AtomicIntegerCompareTest(int value){
this.value = value;
}
public synchronized int increase(){
return value++;
}
public static void main(String args[]){
long start1 = System.currentTimeMillis();
AtomicInteger atomic = new AtomicInteger(0);
for( int i=0;i< 1000000;i++){
atomic.incrementAndGet();
}
long end1 = System.currentTimeMillis();
System.out.println("atomicInteger time elapse:"+(end1 -start1) );
long start = System.currentTimeMillis();
AtomicIntegerCompareTest test = new AtomicIntegerCompareTest(0);
for( int i=0;i< 1000000;i++){
test.increase();
}
long end = System.currentTimeMillis();
System.out.println("time elapse:"+(end -start));
}
Reference
http://stackoverflow.com/questions/2443239/java-atomicinteger-what-are-the-differences-between-compareandset-and-weakcompar
- java AtomicInteger 类学习
- Java AtomicInteger 类
- java 学习笔记之AtomicInteger类的使用
- Java并发学习(七)-AtomicInteger基本数据类型类
- java AtomicInteger 类详细解释
- AtomicInteger 学习
- Java AtomicInteger
- java AtomicInteger
- Java AtomicInteger
- Java AtomicInteger
- Java AtomicInteger
- Java并发控制synchronized与AtomicInteger类
- java中Atomic类之AtomicInteger-api
- AtomicInteger类
- AtomicInteger类
- Java并发学习笔记(九)-原子类AtomicInteger
- AtomicInteger源码学习
- Volley学习之一AtomicInteger
- Jsoup处理br
- Word转Html ( Microsoft.Office.Interop.Word )
- Log4J 配置,自定义错误,邮件发送,解决中文乱码!
- STL算法学习
- 将多个excel表格打包成一个压缩包文件
- java AtomicInteger 类学习
- Centos Linux安装php的mcrypt扩展
- 第三章:标准库类型:string、 vector 和 bitset类型
- BZOJ 2190([SDOI2008]仪仗队-O(n)线性筛欧拉函数)
- C++作业---继承与派生
- 用VIM做任务管理工具(一)
- 会话固定
- 浅谈实现BVH驱动OGRE中模型制作骨骼动画
- JavaFX之Drag And Drop拖放操作