包 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总和。