什么是原子操作?在 Java Concurrency API 中有哪些原 子类(atomic classes)?

Posted 咔啡

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了什么是原子操作?在 Java Concurrency API 中有哪些原 子类(atomic classes)?相关的知识,希望对你有一定的参考价值。

原子操作(atomic operation)意为不可被中断的一个或一系列操作” 。

处理器使用基于对缓存加锁或总线加锁的方式来实现多处理器之间的原子操作

 Java 中可以通过锁和循环 CAS 的方式来实现原子操作。 CAS 操作——

Compare & Set,或是 Compare & Swap,现在几乎所有的 CPU 指令都支持 CAS

的原子操作

原子操作是指一个不受其他操作影响的操作任务单元原子操作是在多线程环境 

下避免数据不一致必须的手段

int++并不是一个原子操作所以当一个线程读取它的值并加 1 另外一个线程 

有可能会读到之前的值这就会引发错误

为了解决这个问题必须保证增加操作是原子的 JDK1.5 之前我们可以使用同 

步技术来做到这一点 JDK1.5,java.util.concurrent.atomic 包提供了 int  

long 类型的原子包装类它们可以自动的保证对于他们的操作是原子的并且不需 

要使用同步

java.util.concurrent 这个包里面提供了一组原子类其基本的特性就是在多线程 

环境下当有多个线程同时执行这些类的实例包含的方法时具有排他性即当 

某个线程进入方法执行其中的指令时不会被其他线程打断而别的线程就像 

自旋锁一样一直等到该方法执行完成才由 JVM 从等待队列中选择一个另一个 

线程进入这只是一种逻辑上的理解

原子类:AtomicBoolean,AtomicInteger,AtomicLong,AtomicReference

原子数组:AtomicIntegerArray,AtomicLongArray,AtomicReferenceArray

原子属性更新器:AtomicLongFieldUpdater,AtomicIntegerFieldUpdater,

AtomicReferenceFieldUpdater

解决 ABA 问题的原子类:AtomicMarkableReference(通过引入一个 boolean

来反映中间有没有变过),AtomicStampedReference(通过引入一个 int 来累 

加来反映中间有没有变过

以上是关于什么是原子操作?在 Java Concurrency API 中有哪些原 子类(atomic classes)?的主要内容,如果未能解决你的问题,请参考以下文章

Java中的volatile关键字为什么不是不具有原子性

并发编程Java中的原子操作

死磕 java并发包之AtomicInteger源码分析

2. 原子性 Atomic

多线程系列二:原子操作

Java 中 long 和 double 的原子性?