JavaTM 2 Platform
Standard Ed. 6

java.util.concurrent.atomic
類別 AtomicIntegerFieldUpdater<T>

java.lang.Object
  繼承者 java.util.concurrent.atomic.AtomicIntegerFieldUpdater<T>
型別參數:
T - 保持可更新欄位的物件型別。

public abstract class AtomicIntegerFieldUpdater<T>
extends Object

基於反射的實用工具,可以對指定類別的指定 volatile int 欄位進行原子更新。此類別用於原子資料結構,該結構中同一節點的幾個欄位都獨立受原子更新控制。

注意,此類別中 compareAndSet 方法的保證弱於其他原子類別中該方法的保證。因為此類別不能確保所有使用的欄位都適合於原子存取目的,所以對於相同更新器上的 compareAndSetset 的其他調用,它僅可以保證原子性和可變語義。

從以下版本開始:
1.5

建構子摘要
protected AtomicIntegerFieldUpdater()
          受保護的無操作建構子,供子類別使用。
 
方法摘要
 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 getAndAdd(T obj, int delta)
          以原子方式將給定值添加到此更新器管理的給定物件的當前值。
 int getAndDecrement(T obj)
          以原子方式將此更新器管理的給定物件的當前值減 1。
 int getAndIncrement(T obj)
          以原子方式將此更新器管理的給定物件的當前值加 1。
 int getAndSet(T obj, int newValue)
          以原子方式將此更新器管理的給定物件的欄位設置為給定值,並返回舊值。
 int incrementAndGet(T obj)
          以原子方式將此更新器管理的給定物件的欄位的當前值加 1。
abstract  void lazySet(T obj, int newValue)
          最後將此更新器管理的給定物件的欄位設置為給定更新值。
static
<U> AtomicIntegerFieldUpdater<U>
newUpdater(Class<U> tclass, String fieldName)
          使用給定欄位為物件創建和返回一個更新器。
abstract  void set(T obj, int newValue)
          將此更新器管理的給定物件的欄位設置為給定更新值。
abstract  boolean weakCompareAndSet(T obj, int expect, int update)
          如果當前值 == 預期值,則以原子方式將此更新器所管理的給定物件的欄位值設置為給定的更新值。
 
從類別 java.lang.Object 繼承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

建構子詳細資訊

AtomicIntegerFieldUpdater

protected AtomicIntegerFieldUpdater()
受保護的無操作建構子,供子類別使用。

方法詳細資訊

newUpdater

public static <U> AtomicIntegerFieldUpdater<U> newUpdater(Class<U> tclass,
                                                          String fieldName)
使用給定欄位為物件創建和返回一個更新器。需要 Class 參數來檢查反射型別和一般型別是否比對。

參數:
tclass - 保持欄位的物件類別
fieldName - 要更新的欄位名稱
返回:
更新器
拋出:
IllegalArgumentException - 如果該欄位不是可變的整數型別
RuntimeException - 如果該類別不保持欄位,或者是錯誤的型別,則拋出 RuntimeException 和一個巢狀的基於反射的異常

compareAndSet

public abstract boolean compareAndSet(T obj,
                                      int expect,
                                      int update)
如果當前值 == 預期值,則以原子方式將此更新器所管理的給定物件的欄位值設置為給定的更新值。對 compareAndSetset 的其他調用,此方法可以確保原子性,但對於欄位中的其他更改則不一定確保原子性。

參數:
obj - 有條件地設置其欄位的物件
expect - 預期值
update - 新值
返回:
如果成功,則返回 true
拋出:
ClassCastException - 如果 obj 不是類別的實例(該類別處理在建構子中建立的欄位)

weakCompareAndSet

public abstract boolean weakCompareAndSet(T obj,
                                          int expect,
                                          int update)
如果當前值 == 預期值,則以原子方式將此更新器所管理的給定物件的欄位值設置為給定的更新值。對 compareAndSetset 的其他調用,此方法可以確保原子性,但對於欄位中的其他更改則不一定確保原子性,並且可能會意外失敗。

可能意外失敗並且不提供排序保證,所以只有在很少的情況下才對 compareAndSet 進行適當地選擇。

參數:
obj - 有條件地設置其欄位的物件
expect - 預期值
update - 新值
返回:
如果成功,則返回 true
拋出:
ClassCastException - 如果 obj 不是類別的實例(該類別處理在建構子中建立的欄位)

set

public abstract void set(T obj,
                         int newValue)
將此更新器管理的給定物件的欄位設置為給定更新值。對於 compareAndSet 的後續調用,此操作可以確保充當可變存儲。

參數:
obj - 要設置其欄位的物件
newValue - 新值

lazySet

public abstract void lazySet(T obj,
                             int newValue)
最後將此更新器管理的給定物件的欄位設置為給定更新值。

參數:
obj - 要設置其欄位的物件
newValue - 新值
從以下版本開始:
1.6

get

public abstract int get(T obj)
獲取此更新器管理的在給定物件的欄位中保持的當前值。

參數:
obj - 要獲取其欄位的物件
返回:
當前值

getAndSet

public int getAndSet(T obj,
                     int newValue)
以原子方式將此更新器管理的給定物件的欄位設置為給定值,並返回舊值。

參數:
obj - 要獲取並設置其欄位的物件
newValue - 新值
返回:
以前的值

getAndIncrement

public int getAndIncrement(T obj)
以原子方式將此更新器管理的給定物件的當前值加 1。

參數:
obj - 要獲取並設置其欄位的物件
返回:
以前的值

getAndDecrement

public int getAndDecrement(T obj)
以原子方式將此更新器管理的給定物件的當前值減 1。

參數:
obj - 要獲取並設置其欄位的物件
返回:
以前的值

getAndAdd

public int getAndAdd(T obj,
                     int delta)
以原子方式將給定值添加到此更新器管理的給定物件的當前值。

參數:
obj - 要獲取並設置其欄位的物件
delta - 要加上的值
返回:
以前的值

incrementAndGet

public int incrementAndGet(T obj)
以原子方式將此更新器管理的給定物件的欄位的當前值加 1。

參數:
obj - 要獲取並設置其欄位的物件
返回:
更新的值

decrementAndGet

public int decrementAndGet(T obj)
以原子方式將此更新器管理的給定物件的欄位的當前值減 1。

參數:
obj - 要獲取並設置其欄位的物件
返回:
更新的值

addAndGet

public int addAndGet(T obj,
                     int delta)
以原子方式將給定值添加到此更新器管理的給定物件的欄位當前值。

參數:
obj - 要獲取並設置其欄位的物件
delta - 要加上的值
返回:
更新的值

JavaTM 2 Platform
Standard Ed. 6

提交錯誤或意見

版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only