今天是:
带着程序的旅程,每一行代码都是你前进的一步,每个错误都是你成长的机会,最终,你将抵达你的目的地。
title

atomic

package java.util.concurrent.atomic

一个小型类工具包,支持对单个变量进行无锁线程安全编程。原子类的实例维护使用方法访问和更新的值,否则可用于使用关联原子 VarHandle 操作的字段。类 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 和相关类的通用替代品。它们没有定义诸如equals,hashCode和compareTo之类的方法。由于原子变量预计会发生突变,因此它们是哈希表键的糟糕选择。AtomicIntegerArray、AtomicLongArray 和 AtomicReferenceArray 类进一步扩展了对这些类型的数组的原子操作支持。这些类在为其数组元素提供易失性访问语义方面也值得注意。除了表示单个值和数组的类之外,此包还包含 Updater 类,这些类可用于获取对任何选定类的任何选定易失性字段的 compareAndSet 和相关操作。这些类早于 VarHandle 的引入,用途更有限。AtomicReferenceFieldUpdater、AtomicIntegerFieldUpdater 和 AtomicLongFieldUpdater 是基于反射的实用程序,提供对关联字段类型的访问。这些主要用于原子数据结构,其中同一节点的几个易失性字段(例如,树节点的链接)独立地受到原子更新的影响。这些类在如何以及何时使用原子更新方面提供了更大的灵活性,但代价是基于反射的设置更笨拙、使用不太方便和保证更弱。类将单个布尔值与引用相关联。例如,此位可以在数据结构中使用,以表示所引用的对象已在逻辑上被删除。类将整数值与引用相关联。例如,这可用于表示对应于一系列更新的版本号。

 

 

分享到:

专栏

类型标签

网站访问总量