0
나는 clone()
공개 메서드가있는 SomeMutableData
클래스가 있습니다. 나는 어떤 스레드도 일관성없는 상태를 보지 못하도록하고 싶다. (인스턴스가 홀더만을 사용하여 전달된다고 가정 할 때). 동기화를 사용하는 것이 가장 안전한 방법이라고 생각합니다. 맞습니까?임의의 복제 가능 데이터를위한 스레드 안전 홀더
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