您的位置:首页 > 编程语言 > Java开发

【Java基础】线程笔记——原子操作:atomic

2017-03-27 11:03 561 查看
atomic不会阻塞线程。是加强版的volatile原子操作。主要用于高并发环境高效程序处理

了解volatile

修饰变量

易变的、不稳定的

从内存种获取值

读取/写入不需要锁

提供了内存可见性,但是没提供原子性。不适用高并发场景

volatile与加锁机制主要的区别:前者只提供了内存可见性。后者还提供了原子性

atomic处理类

java.util.concurrent.atomic


基本类: AtomicInteger、AtomicLong、AtomicBoolean

引用类型: AtomicReference

数组类型: AtomicIntegerArray、AtomicLongArray、AtomicReferenceArray

属性原子修改器: AtomicIntegerFieldUpdater、AtomicLongFieldUpdater、AtomicReferenceFieldUpdater、

相关api



get() 获取值

getAndSet() 取当前值并设置新值

getAndIncrement() 获取当前的值,自增

getAndDecrement() 获取当前的值,自减

getAndAdd() 获取当前的值,加上预期值

public static void main(String[] args) {
AtomicInteger atomicNumber = new AtomicInteger(0);
System.out.println(atomicNumber.get());//0
System.out.println(atomicNumber.getAndSet(7));//0
System.out.println(atomicNumber.getAndIncrement());//7
System.out.println(atomicNumber.getAndDecrement());//8
System.out.println(atomicNumber.getAndAdd(10));//7
System.out.println(atomicNumber.get());//17
}


原理:利用CPU比较并交换(CAS) 和 非阻塞算法。有些方法是通过调用JNI(JavaNativeInterface)实现的
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 线程