Package java.util.concurrent.atomic
VarHandle
操作的字段的方法访问和更新的值。 类的实例AtomicBoolean
, AtomicInteger
, AtomicLong
,和AtomicReference
各自提供访问和更新相应的类型的单个变量。 每个类还为该类型提供适当的实用方法。 例如,类AtomicLong
和AtomicInteger
提供原子增量方法。 一个应用程序是生成序列号,如:
class Sequencer { private final AtomicLong sequenceNumber = new AtomicLong(0); public long next() { return sequenceNumber.getAndIncrement(); } }
所包含值的任意变换由低级读 - 修改 - 写操作(例如compareAndSet
和更高级方法(例如getAndUpdate
。
这些类不是java.lang.Integer
及相关类的通用替换。 他们没有定义的方法,如equals
, hashCode
和compareTo
。 因为预期原子变量会发生变异,所以它们对于哈希表键是不好的选择。
的AtomicIntegerArray
, AtomicLongArray
,和AtomicReferenceArray
类进一步扩展到这些类型的数组原子操作的支持。 这些类在为其数组元素提供volatile
访问语义方面也值得注意。
除了表示单个值和数组的类之外,此包还包含Updater类,可用于在任何选定类的任何选定volatile
字段上获取compareAndSet
和相关操作。 这些类早于VarHandle
的引入,并且使用更为有限。 AtomicReferenceFieldUpdater
, AtomicIntegerFieldUpdater
,和AtomicLongFieldUpdater
是基于反射的实用程序,提供对相关联的字段类型。 这些主要用于原子数据结构,其中同一节点的几个volatile
字段(例如,树节点的链接)独立地受原子更新的影响。 这些类在如何以及何时使用原子更新方面提供了更大的灵活性,代价是更加笨拙的基于反射的设置,不太方便的使用和较弱的保证。
AtomicMarkableReference
类将单个布尔值与引用相关联。 例如,该位可能在数据结构中使用,表示被引用的对象在逻辑上已被删除。 AtomicStampedReference
类将整数值与引用相关联。 例如,这可以用于表示与一系列更新相对应的版本号。
- 从以下版本开始:
- 1.5
-
类摘要 类 描述 AtomicBoolean 可以原子方式更新的值boolean
。AtomicInteger 可以原子方式更新的int
值。AtomicIntegerArray 一个int
数组,其中元素可以原子方式更新。AtomicIntegerFieldUpdater<T> 基于反射的实用程序,可对指定类的指定volatile int
字段进行原子更新。AtomicLong 可以原子方式更新的long
值。AtomicLongArray 一个long
数组,其中元素可以原子方式更新。AtomicLongFieldUpdater<T> 基于反射的实用程序,可以对指定类的指定volatile long
字段进行原子更新。AtomicMarkableReference<V> AtomicMarkableReference
维护一个对象引用以及一个标记位,可以原子方式更新。AtomicReference<V> 可以原子方式更新的对象引用。AtomicReferenceArray<E> 一组对象引用,其中元素可以原子方式更新。AtomicReferenceFieldUpdater<T,V> 基于反射的实用程序,可以对指定类的指定volatile
引用字段进行原子更新。AtomicStampedReference<V> AtomicStampedReference
维护一个对象引用以及一个整数“标记”,可以原子方式更新。DoubleAccumulator 一个或多个变量共同维护使用提供的函数更新的运行double
值。DoubleAdder 一个或多个变量共同维持最初的零和double
总和。LongAccumulator 一个或多个变量共同维护使用提供的函数更新的运行long
值。LongAdder 一个或多个变量共同维持最初为零的总和为long
。