模块  java.base

Package java.util.concurrent.atomic

一个小型工具包,支持对单个变量进行无锁线程安全编程。 原子类的实例维护使用其他可用于使用关联原子VarHandle操作的字段的方法访问和更新的值。

类的实例AtomicBooleanAtomicIntegerAtomicLong ,和AtomicReference各自提供访问和更新相应的类型的单个变量。 每个类还为该类型提供适当的实用方法。 例如,类AtomicLongAtomicInteger提供原子增量方法。 一个应用程序是生成序列号,如:

   class Sequencer { private final AtomicLong sequenceNumber = new AtomicLong(0); public long next() { return sequenceNumber.getAndIncrement(); } } 

所包含值的任意变换由低级读 - 修改 - 写操作(例如compareAndSet和更高级方法(例如getAndUpdate

这些类不是java.lang.Integer及相关类的通用替换。 他们没有定义的方法,如equalshashCodecompareTo 因为预期原子变量会发生变异,所以它们对于哈希表键是不好的选择。

AtomicIntegerArrayAtomicLongArray ,和AtomicReferenceArray类进一步扩展到这些类型的数组原子操作的支持。 这些类在为其数组元素提供volatile访问语义方面也值得注意。

除了表示单个值和数组的类之外,此包还包含Updater类,可用于在任何选定类的任何选定volatile字段上获取compareAndSet和相关操作。 这些类早于VarHandle的引入,并且使用更为有限。 AtomicReferenceFieldUpdaterAtomicIntegerFieldUpdater ,和AtomicLongFieldUpdater是基于反射的实用程序,提供对相关联的字段类型。 这些主要用于原子数据结构,其中同一节点的几个volatile字段(例如,树节点的链接)独立地受原子更新的影响。 这些类在如何以及何时使用原子更新方面提供了更大的灵活性,代价是更加笨拙的基于反射的设置,不太方便的使用和较弱的保证。

AtomicMarkableReference类将单个布尔值与引用相关联。 例如,该位可能在数据结构中使用,表示被引用的对象在逻辑上已被删除。 AtomicStampedReference类将整数值与引用相关联。 例如,这可以用于表示与一系列更新相对应的版本号。

从以下版本开始:
1.5