Module  java.base

Package java.util.concurrent.atomic

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

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

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

所含值的任意的转化通过低级别读-修改-写操作,如提供两个compareAndSet和由更高级别的方法,例如getAndUpdate

这些类不是通用替代java.lang.Integer和相关类。 他们没有定义方法,比如equalshashCodecompareTo 因为原子变量预计会被突变,所以它们是散列表键的不好选择。

AtomicIntegerArrayAtomicLongArrayAtomicReferenceArray类进一步扩展到这些类型的数组原子操作的支持。 这些类别对于为其数组元素提供volatile访问语义也是值得注意的。

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

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

从以下版本开始:
1.5