|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
| 上一個類別 下一個類別 | 框架 無框架 | |||||||||
| 摘要: 巢狀 | 欄位 | 建構子 | 方法 | 詳細資訊: 欄位 | 建構子 | 方法 | |||||||||
java.lang.Objectjava.util.concurrent.atomic.AtomicReferenceFieldUpdater<T,V>
T - 保持可更新欄位的物件的型別V - 欄位的型別public abstract class AtomicReferenceFieldUpdater<T,V>
基於反射的實用工具,可以對指定類別的指定 volatile 欄位進行原子更新。該類別用於原子資料結構,該結構中同一節點的幾個參考欄位都獨立受原子更新控制。例如,階層樹節點可能宣告為
class Node {
private volatile Node left, right;
private static final AtomicReferenceFieldUpdater leftUpdater =
AtomicReferenceFieldUpdater.newUpdater(Node.class, Node.class, "left");
private static AtomicReferenceFieldUpdater 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 方法的保證弱於其他原子類別中該方法的保證。因為此類別不能確保所有使用的欄位都適合於原子存取目的,所以,對於 compareAndSet 和 set 的其他調用,它僅可以保證原子性和可變語義。
| 建構子摘要 | |
|---|---|
protected |
AtomicReferenceFieldUpdater()
受保護的無操作建構子,供子類別使用。 |
| 方法摘要 | ||
|---|---|---|
abstract boolean |
compareAndSet(T obj,
V expect,
V update)
如果當前值 == 預期值,則以原子方式將此更新器管理的給定物件的欄位設置為給定的更新值。 |
|
abstract V |
get(T obj)
獲取由此更新器管理的在給定物件的欄位中保持的當前值。 |
|
V |
getAndSet(T obj,
V newValue)
將此更新器管理的給定物件的欄位自動設置為給定值,並返回舊值。 |
|
abstract void |
lazySet(T obj,
V newValue)
最終將此更新器管理的給定物件的欄位設置為給定更新值。 |
|
static
|
newUpdater(Class<U> tclass,
Class<W> vclass,
String fieldName)
使用給定的欄位為物件創建和返回一個更新器。 |
|
abstract void |
set(T obj,
V newValue)
將此更新器管理的給定物件的欄位設置為給定更新值。 |
|
abstract boolean |
weakCompareAndSet(T obj,
V expect,
V update)
如果當前值 == 預期值,則以原子方式將此更新器管理的給定物件的欄位設置為給定的更新值。 |
|
| 從類別 java.lang.Object 繼承的方法 |
|---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
| 建構子詳細資訊 |
|---|
protected AtomicReferenceFieldUpdater()
| 方法詳細資訊 |
|---|
public static <U,W> AtomicReferenceFieldUpdater<U,W> newUpdater(Class<U> tclass,
Class<W> vclass,
String fieldName)
tclass - 保持欄位的物件類別。vclass - 該欄位的類別fieldName - 要更新的欄位名稱。
IllegalArgumentException - 如果該欄位不是可變參考型別。
RuntimeException - 如果該類別不保持欄位,或者是錯誤的型別,將拋出 RuntimeException 和一個巢狀的基於反射的異常。
public abstract boolean compareAndSet(T obj,
V expect,
V update)
== 預期值,則以原子方式將此更新器管理的給定物件的欄位設置為給定的更新值。對 compareAndSet 和 set 的其他調用,此方法可以確保原子性,但對於欄位中的其他更改則不一定確保原子性。
obj - 有條件地設置其欄位的物件expect - 預期值update - 新值
public abstract boolean weakCompareAndSet(T obj,
V expect,
V update)
== 預期值,則以原子方式將此更新器管理的給定物件的欄位設置為給定的更新值。對 compareAndSet 和 set 的其他調用,此方法可以確保原子性,但對於欄位中的其他更改則不一定確保原子性。
可能意外失敗並且不提供排序保證,所以只有在很少的情況下才對 compareAndSet 進行適當地選擇。
obj - 有條件地設置其欄位的物件expect - 預期值update - 新值
public abstract void set(T obj,
V newValue)
compareAndSet 的後續調用,此操作可以確保充當可變存儲。
obj - 要設置其欄位的物件newValue - 新值
public abstract void lazySet(T obj,
V newValue)
obj - 要設置其欄位的物件newValue - 新值public abstract V get(T obj)
obj - 要獲取其欄位的物件
public V getAndSet(T obj,
V newValue)
obj - 要獲取並設置其欄位的物件newValue - 新值
|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
| 上一個類別 下一個類別 | 框架 無框架 | |||||||||
| 摘要: 巢狀 | 欄位 | 建構子 | 方法 | 詳細資訊: 欄位 | 建構子 | 方法 | |||||||||
版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only。