【Java基础】线程笔记——原子操作:atomic
2017-03-27 11:03
561 查看
atomic不会阻塞线程。是加强版的volatile原子操作。主要用于高并发环境高效程序处理
易变的、不稳定的
从内存种获取值
读取/写入不需要锁
提供了内存可见性,但是没提供原子性。不适用高并发场景
volatile与加锁机制主要的区别:前者只提供了内存可见性。后者还提供了原子性
基本类: AtomicInteger、AtomicLong、AtomicBoolean
引用类型: AtomicReference
数组类型: AtomicIntegerArray、AtomicLongArray、AtomicReferenceArray
属性原子修改器: AtomicIntegerFieldUpdater、AtomicLongFieldUpdater、AtomicReferenceFieldUpdater、
相关api
get() 获取值
getAndSet() 取当前值并设置新值
getAndIncrement() 获取当前的值,自增
getAndDecrement() 获取当前的值,自减
getAndAdd() 获取当前的值,加上预期值
原理:利用CPU比较并交换(CAS) 和 非阻塞算法。有些方法是通过调用JNI(JavaNativeInterface)实现的
了解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.util.concurrent(JUC)的研究--》atomic原子操作--》从AtomicInteger开始
- Java多线程编程总结笔记——一多线程基础知识
- 黑马程序员 Java基础学习笔记 线程间同信
- Java基础复习笔记系列 七 IO操作
- java 线程 原子类相关操作示例 thinking in java4 目录21.3.4
- Java多线程编程总结笔记——一多线程基础知识
- Java基础视频笔记(七):IO操作
- java i++ 并非原子操作的解决方法——用AtomicInteger
- java学习笔记 基础 数组模仿栈的操作
- Java基础视频教程第04天_学习笔记之数组常见操作
- java.util.concurrent(JUC)的研究--》atomic原子操作--》happens-before法则
- 学习笔记之javaweb基础:jsp基本语法,内置对象,对JavaBean的操作语法
- java基础学习笔记之九--线程(1)
- 黑马程序员java基础线程章节笔记
- c#线程基础之原子操作
- java基础学习笔记之九--线程(2)
- 再学java基础(10) 线程概念&操作
- JAVA学习笔记——JAVA基础语法--线程(九)
- [Java基础] Java线程复习笔记
- Java基础视频笔记(六):本地文件操作