JavaTM 2 Platform
Standard Ed. 6

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

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

public abstract class AtomicLongFieldUpdater<T>
extends Object

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

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

從以下版本開始:
1.5

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

建構子詳細資訊

AtomicLongFieldUpdater

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

方法詳細資訊

newUpdater

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

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

compareAndSet

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

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

weakCompareAndSet

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

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

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

set

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

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

lazySet

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

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

get

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

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

getAndSet

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

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

getAndIncrement

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

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

getAndDecrement

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

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

getAndAdd

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

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

incrementAndGet

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

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

decrementAndGet

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

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

addAndGet

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

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

JavaTM 2 Platform
Standard Ed. 6

提交錯誤或意見

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