0
我有一個類SomeMutableData
使用公共clone()
方法。我想確保沒有線程看到不一致的狀態(假設實例將僅使用持有者傳遞)。我假設使用同步是最安全的可能性,對吧?任意可複製數據的線程安全持有者
public final class ThreadSafeHolder {
public ThreadSafeHolder(SomeMutableData data) {
storeData(data);
}
public synchronized SomeMutableData cloneData() {
return data.clone();
}
public synchronized void storeData(SomeMutableData data) {
this.data = data.clone();
}
private SomeMutableData data;
}
以下與第一種方法一樣安全嗎?
public final class ThreadSafeHolder2 {
public ThreadSafeHolder2(SomeMutableData data) {
storeData(data);
}
public SomeMutableData cloneData() {
return data.get().clone();
}
public void storeData(SomeMutableData data) {
this.data.set(data.clone());
}
private final AtomicReference<SomeMutableData> data
= new AtomicReference<SomeMutableData>();
}
*「我不認爲持有人應該擴展它正在包裝的類型。」 - - 我也不是!這不是我,它是日食... – maaartinus 2011-03-28 16:51:52