예를 들어 싱글톤 패턴을 작성하려면 동기화된 동기화 방법을 사용하지 않고 휘발성 수정을 사용합니다.
비공개 Sigleton(){
}
개인 정적 휘발성 Sigleton s = null;
public static Sigleton getInstance(){
으아악
}
이렇게 하면 스레드 안전 문제가 해결될 수 있나요?
스레드 가시성을 이해하는 방법
s==null이면 두 개의 스레드가 동시에 들어오면 결국 두 개의 새로운 sigleton 객체가 생성되지 않나요?
new의 오버헤드가 매우 작다면 이렇게 작성해도 전혀 괜찮습니다. 하지만 초기화 오버헤드가 높으면 여전히 동기화를 사용해야 합니다. 일반적인 이중 확인 잠금은 다음과 같이 작성됩니다.
으아악먼저 메모리 모델을 이해하세요.
스레드는 메인 메모리의 변수를 직접 수정하지 않고 자신의 작업 메모리를 먼저 작성한 다음 이를 메인 메모리에 동기화합니다. 동기화되지 않은 경우 다른 스레드는 수정 사항을 볼 수 없습니다. 작업 메모리 캐시).