Java中的13个原子操作类

1、背景                                                            

Java从JDK1.5开始提供了java.util.concurrent.atomic包,这个包中的原子操作类提供了一种用法简单,性能高效,线程安全地更新一个变量的方式。

Atomic包里一共提供了13个类,属于4种类型的原子更新方式,分别是原子更新基本类型,原子更新数组,原子更新引用和原子更新属性

Atomic包里的类基本都是使用Unsafe实现的包装类。

2、原子更新基本类型                                          

Atomic包提供了以下3个类:AtomicBoolean、AtomicInteger、AtomicLong。

Unsafe只提供了3种CAS方法:compareAndSwapObject、compareAndSwapInt、compareAndSwapLong,再看AtomicBoolean源码,发现它是将Boolean转换成整型,再使用compareAndSwapInt进行CAS,所以原子更新char、float和double变量也可以用类似的思路来实现。

3、原子更新数组                                                

Atomic包提供了以下3个类:AtomicIntegerArray、AtomicLongArray、AtomicReferenceArray

4、原子更新引用类型                                          

Atomic包提供了以下3个类:AtomicReference、AtomicReferenceFieldUpdater、AtomicMarkableReference(原子更新带有标记位的引用类型。可以原子更新一个布尔类型的标记位和引用类型。

5、原子更新字段类                                                                              

 Atomic包提供了以下3个类:AtomicIntegerFieldUpdater、AtomicLongFieldUpdater、AtomicStampedFieldUpdater(更新带有版本号的引用类型)

要想原子地更新字段类需要两步。第一步,因为原子更新字段类都是抽象类,每次使用的时候必须使用静态方法newUpdater()创建一个更新器,并且需要设置想要更新的类和属性。第二步,更新类的字段必须使用public volatile修饰符。

原文地址:https://www.cnblogs.com/fankongkong/p/7289421.html