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
-
类摘要 Class 描述 AtomicBoolean Aboolean
可能原子更新的值。AtomicInteger 可能原子更新的值为int
。AtomicIntegerArray 其中可以原子更新元素的int
数组。AtomicIntegerFieldUpdater<T> 基于反射的实用程序,可以对指定类的指定的volatile int
字段进行原子更新。AtomicLong Along
可能原子更新的值。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
总和。