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