Most visited

Recently visited

Added in API level 1

AtomicReferenceFieldUpdater

public abstract class AtomicReferenceFieldUpdater
extends Object

java.lang.Object
   ↳ java.util.concurrent.atomic.AtomicReferenceFieldUpdater<T, V>


基于反射的实用工具,可以将原子更新到指定类的指定volatile参考字段。 此类专用于原子数据结构,其中同一节点的多个参考字段独立进行原子更新。 例如,树节点可能被声明为

 class Node {
   private volatile Node left, right;

   private static final AtomicReferenceFieldUpdater<Node, Node> leftUpdater =
     AtomicReferenceFieldUpdater.newUpdater(Node.class, Node.class, "left");
   private static AtomicReferenceFieldUpdater<Node, Node> rightUpdater =
     AtomicReferenceFieldUpdater.newUpdater(Node.class, Node.class, "right");

   Node getLeft() { return left; }
   boolean compareAndSetLeft(Node expect, Node update) {
     return leftUpdater.compareAndSet(this, expect, update);
   }
   // ... and so on
 }

请注意, compareAndSet方法的保证比其他原子类中的保证更弱。 由于该类无法确保该字段的所有用途都适用于原子访问,因此它只能保证相对于同一更新程序中其他调用compareAndSetset原子性。

Summary

Protected constructors

AtomicReferenceFieldUpdater()

受保护的无所事事的构造函数供子类使用。

Public methods

final V accumulateAndGet(T obj, V x, BinaryOperator<V> accumulatorFunction)

使用给定函数应用于当前值和给定值的结果,原子更新由此更新程序管理的给定对象的字段,并返回更新后的值。

abstract boolean compareAndSet(T obj, V expect, V update)

如果当前值为 == ,则以原子方式将此更新程序管理的给定对象的字段设置为给定的更新值。

abstract V get(T obj)

获取由此更新器管理的给定对象的字段中保存的当前值。

final V getAndAccumulate(T obj, V x, BinaryOperator<V> accumulatorFunction)

使用给定函数应用到当前值和给定值的结果,原子地更新由此更新程序管理的给定对象的字段,并返回以前的值。

V getAndSet(T obj, V newValue)

以原子方式将由此更新程序管理的给定对象的字段设置为给定值并返回旧值。

final V getAndUpdate(T obj, UnaryOperator<V> updateFunction)

使用给定函数的结果原子更新由此更新程序管理的给定对象的字段,并返回以前的值。

abstract void lazySet(T obj, V newValue)

最终将由此更新程序管理的给定对象的字段设置为给定的更新值。

static <U, W> AtomicReferenceFieldUpdater<U, W> newUpdater(Class<U> tclass, Class<W> vclass, String fieldName)

创建并返回具有给定字段的对象的更新程序。

abstract void set(T obj, V newValue)

将由此更新程序管理的给定对象的字段设置为给定的更新值。

final V updateAndGet(T obj, UnaryOperator<V> updateFunction)

使用给定函数的结果原子更新由此更新程序管理的给定对象的字段,并返回更新后的值。

abstract boolean weakCompareAndSet(T obj, V expect, V update)

如果当前值 ==为预期值,则将由此更新程序管理的给定对象的字段以原子方式设置为给定的更新值。

Inherited methods

From class java.lang.Object

Protected constructors

AtomicReferenceFieldUpdater

Added in API level 1
AtomicReferenceFieldUpdater ()

受保护的无所事事的构造函数供子类使用。

Public methods

accumulateAndGet

Added in API level 24
V accumulateAndGet (T obj, 
                V x, 
                BinaryOperator<V> accumulatorFunction)

使用给定函数应用于当前值和给定值的结果,原子更新由此更新程序管理的给定对象的字段,并返回更新后的值。 该函数应该是无副作用的,因为当尝试更新由于线程之间的争用而失败时,它可能会被重新应用。 该函数以当前值作为第一个参数,给定更新作为第二个参数应用。

Parameters
obj T: An object whose field to get and set
x V: the update value
accumulatorFunction BinaryOperator: a side-effect-free function of two arguments
Returns
V the updated value

compareAndSet

Added in API level 1
boolean compareAndSet (T obj, 
                V expect, 
                V update)

如果当前值==为期望值, ==原子方式将此更新程序管理的给定对象的字段设置为给定的更新值。 对于其他compareAndSetset调用,这种方法保证是原子的,但不一定与该领域的其他变化有关。

Parameters
obj T: An object whose field to conditionally set
expect V: the expected value
update V: the new value
Returns
boolean true if successful

get

Added in API level 1
V get (T obj)

获取由此更新器管理的给定对象的字段中保存的当前值。

Parameters
obj T: An object whose field to get
Returns
V the current value

getAndAccumulate

Added in API level 24
V getAndAccumulate (T obj, 
                V x, 
                BinaryOperator<V> accumulatorFunction)

使用给定函数应用到当前值和给定值的结果,原子地更新由此更新程序管理的给定对象的字段,并返回以前的值。 该函数应该是无副作用的,因为当尝试更新由于线程之间的争用而失败时,它可能会被重新应用。 该函数以当前值作为第一个参数,给定更新作为第二个参数应用。

Parameters
obj T: An object whose field to get and set
x V: the update value
accumulatorFunction BinaryOperator: a side-effect-free function of two arguments
Returns
V the previous value

getAndSet

Added in API level 1
V getAndSet (T obj, 
                V newValue)

以原子方式将由此更新程序管理的给定对象的字段设置为给定值并返回旧值。

Parameters
obj T: An object whose field to get and set
newValue V: the new value
Returns
V the previous value

getAndUpdate

Added in API level 24
V getAndUpdate (T obj, 
                UnaryOperator<V> updateFunction)

使用给定函数的结果原子更新由此更新程序管理的给定对象的字段,并返回以前的值。 该函数应该是无副作用的,因为当尝试更新由于线程之间的争用而失败时,它可能会被重新应用。

Parameters
obj T: An object whose field to get and set
updateFunction UnaryOperator: a side-effect-free function
Returns
V the previous value

lazySet

Added in API level 9
void lazySet (T obj, 
                V newValue)

最终将由此更新程序管理的给定对象的字段设置为给定的更新值。

Parameters
obj T: An object whose field to set
newValue V: the new value

newUpdater

Added in API level 1
AtomicReferenceFieldUpdater<U, W> newUpdater (Class<U> tclass, 
                Class<W> vclass, 
                String fieldName)

创建并返回具有给定字段的对象的更新程序。 需要Class参数来检查反射类型和泛型类型是否匹配。

Parameters
tclass Class: the class of the objects holding the field
vclass Class: the class of the field
fieldName String: the name of the field to be updated
Returns
AtomicReferenceFieldUpdater<U, W> the updater
Throws
ClassCastException if the field is of the wrong type
IllegalArgumentException if the field is not volatile
RuntimeException with a nested reflection-based exception if the class does not hold field or is the wrong type, or the field is inaccessible to the caller according to Java language access control

set

Added in API level 1
void set (T obj, 
                V newValue)

将由此更新程序管理的给定对象的字段设置为给定的更新值。 该操作保证作为对后续调用compareAndSet的不稳定存储。

Parameters
obj T: An object whose field to set
newValue V: the new value

updateAndGet

Added in API level 24
V updateAndGet (T obj, 
                UnaryOperator<V> updateFunction)

使用给定函数的结果原子更新由此更新程序管理的给定对象的字段,并返回更新后的值。 该函数应该是无副作用的,因为当尝试更新由于线程之间的争用而失败时,它可能会被重新应用。

Parameters
obj T: An object whose field to get and set
updateFunction UnaryOperator: a side-effect-free function
Returns
V the updated value

weakCompareAndSet

Added in API level 1
boolean weakCompareAndSet (T obj, 
                V expect, 
                V update)

如果当前值==是期望值,则将由此更新程序管理的给定对象的字段按原子级设置为给定的更新值。 与其他compareAndSetset调用set ,此方法在原子方面保证是原子的,但不一定与该领域的其他更改有关。

May fail spuriously and does not provide ordering guarantees ,所以只有很少的 compareAndSet合适的选择。

Parameters
obj T: An object whose field to conditionally set
expect V: the expected value
update V: the new value
Returns
boolean true if successful

Hooray!