SomeMutableData
publicclone()
メソッドを持つクラスがあります。一貫性のない状態がスレッドに表示されないようにしたいと思います (インスタンスがホルダーのみを使用して渡されると仮定します)。同期を使用することが最も安全な可能性だと思いますよね?
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>();
}