T
- 持有可更新字段的对象的类型
public abstract class AtomicIntegerFieldUpdater<T> extends Object
volatile int
字段进行原子更新。
该类设计用于原子数据结构,其中同一节点的多个字段独立受原子更新的影响。
请注意,该类中compareAndSet
方法的保证弱于其他原子类。 因为这个类不能确保该字段的所有使用都适用于原子访问的目的,所以它可以保证原子性仅在相同更新器上的compareAndSet
和set
其他调用。
Modifier | Constructor and Description |
---|---|
protected |
AtomicIntegerFieldUpdater()
受保护的do-nothing构造函数供子类使用。
|
Modifier and Type | Method and Description |
---|---|
int |
accumulateAndGet(T obj, int x, IntBinaryOperator accumulatorFunction)
原子更新由此更新程序管理的给定对象的字段,并将给定函数应用于当前值和给定值,返回更新后的值。
|
int |
addAndGet(T obj, int delta)
将给定值原子地添加到由此更新程序管理的给定对象的字段的当前值。
|
abstract boolean |
compareAndSet(T obj, int expect, int update)
如果当前值
== 为预期值,则将由此更新程序管理的给定对象的字段原子设置为给定的更新值。
|
int |
decrementAndGet(T obj)
由此更新程序管理的给定对象的字段的当前值原子减1。
|
abstract int |
get(T obj)
获取由此更新程序管理的给定对象的字段中保留的当前值。
|
int |
getAndAccumulate(T obj, int x, IntBinaryOperator accumulatorFunction)
原子更新由此更新程序管理的给定对象的字段,并将给定函数应用于当前值和给定值,返回上一个值。
|
int |
getAndAdd(T obj, int delta)
将给定值原子地添加到由此更新程序管理的给定对象的字段的当前值。
|
int |
getAndDecrement(T obj)
由此更新程序管理的给定对象的字段的当前值原子减1。
|
int |
getAndIncrement(T obj)
由此更新程序管理的给定对象的字段的当前值以原子方式递增1。
|
int |
getAndSet(T obj, int newValue)
将由此更新程序管理的给定对象的字段原子设置为给定值,并返回旧值。
|
int |
getAndUpdate(T obj, IntUnaryOperator updateFunction)
使用应用给定函数的结果原子更新由此更新程序管理的给定对象的字段,返回上一个值。
|
int |
incrementAndGet(T obj)
由此更新程序管理的给定对象的字段的当前值以原子方式递增1。
|
abstract void |
lazySet(T obj, int newValue)
最终将由此更新程序管理的给定对象的字段设置为给定的更新值。
|
static <U> AtomicIntegerFieldUpdater<U> |
newUpdater(类<U> tclass, String fieldName)
创建并返回具有给定字段的对象的更新程序。
|
abstract void |
set(T obj, int newValue)
将由此更新程序管理的给定对象的字段设置为给定的更新值。
|
int |
updateAndGet(T obj, IntUnaryOperator updateFunction)
原子更新由此更新程序管理的给定对象的字段与应用给定函数的结果,返回更新的值。
|
abstract boolean |
weakCompareAndSet(T obj, int expect, int update)
如果当前值
== 为预期值,则将由此更新程序管理的给定对象的字段原子设置为给定的更新值。
|
public static <U> AtomicIntegerFieldUpdater<U> newUpdater(类<U> tclass, String fieldName)
U
- tclass的实例类型
tclass
- 持有该字段的对象的类
fieldName
- 要更新的字段的名称
IllegalArgumentException
- 如果该字段不是易失性整数类型
RuntimeException
- 如果类不保留字段或错误类型,则基于反射的嵌套异常,或者根据Java语言访问控制,调用者无法访问该字段
public abstract boolean compareAndSet(T obj, int expect, int update)
==
由此更新程序管理的给定对象的字段设置为给定的更新值。
相对于其他对compareAndSet
和set
调用,此方法保证是原子的,但不一定与本领域的其他更改相关。
obj
- 有条件地设置其字段的对象
expect
- 预期值
update
- 新价值
true
如果成功
ClassCastException
- 如果
obj
不是具有在构造函数中建立的字段的类的实例
public abstract boolean weakCompareAndSet(T obj, int expect, int update)
==
由此更新程序管理的给定对象的字段原子设置为给定的更新值。
相对于其他对compareAndSet
和set
调用,此方法保证是原子的,但不一定与本领域的其他更改相关。
May fail spuriously and does not provide ordering guarantees ,所以很少适合替代compareAndSet
。
obj
- 有条件地设置其字段的对象
expect
- 预期值
update
- 新价值
true
如果成功
ClassCastException
- 如果
obj
不是具有在构造函数中建立的字段的类的实例
public abstract void set(T obj, int newValue)
compareAndSet
。
obj
- 要设置的字段的对象
newValue
- 新价值
public abstract void lazySet(T obj, int newValue)
obj
- 要设置的字段的对象
newValue
- 新价值
public abstract int get(T obj)
obj
- 要获取字段的对象
public int getAndSet(T obj, int newValue)
obj
- 一个要获取和设置的字段的对象
newValue
- 新的价值
public int getAndIncrement(T obj)
obj
- 要获取和设置的字段的对象
public int getAndDecrement(T obj)
obj
- 一个要获取和设置的字段的对象
public int getAndAdd(T obj, int delta)
obj
- 一个要获取和设置的字段的对象
delta
- 要添加的值
public int incrementAndGet(T obj)
obj
- 要获取和设置的字段的对象
public int decrementAndGet(T obj)
obj
- 要获取和设置的字段的对象
public int addAndGet(T obj, int delta)
obj
- 一个要获取和设置的字段的对象
delta
- 要添加的值
public final int getAndUpdate(T obj, IntUnaryOperator updateFunction)
obj
- 一个要获取和设置的字段的对象
updateFunction
- 无副作用的功能
public final int updateAndGet(T obj, IntUnaryOperator updateFunction)
obj
- 一个要获取和设置的字段的对象
updateFunction
- 无副作用的功能
public final int getAndAccumulate(T obj, int x, IntBinaryOperator accumulatorFunction)
obj
- 一个要获取和设置的字段的对象
x
- 更新值
accumulatorFunction
- 两个参数的无效副作用
public final int accumulateAndGet(T obj, int x, IntBinaryOperator accumulatorFunction)
obj
- 要获取和设置的字段的对象
x
- 更新值
accumulatorFunction
- 两个参数的无副作用的函数
Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2014, Oracle and/or its affiliates. All rights reserved.