우리는 모든 기존 코드를 라이브러리에 패키지화했으며 새로운 코드 버전은 필요한 경우 레거시 코드를 호출합니다. 이 접근법은 좋지만, 현재 레거시 코드의 일부로 스레드 안전하지 않은 싱글 톤이있는 반면, 새로운 코드는 스레드 안전성을 기대합니다. 로드가 특정 숫자를 넘을 때 시스템을 막히게 할 수 있으므로 블록을 동기화 할 여력이 없습니다. 생각은 당신의 의견을 받아 들일 것입니다. 감사!레거시 싱글 톤 깨기
편집 : 이 싱글이 null 인스턴스에서 동기화를 두 번 검사없이 게으른 것들이다 :
public static Parser getInstance() {
Parser p = null;
try {
if (instance == null) {
instance = new Parser(...);
}
} catch (Exception x) {
...
}
return p;
}
이 코드는 우리가 그들을 해결할 수없는, 적어도 8 세입니다.
"스레드가 안전하지 않다"는 것은 무엇을 의미합니까? 이 싱글 톤은 상태 유지입니까? 또는 그들이 구현되는 방식 (둘 이상의 인스턴스를 생성 할 수 있음)과 관련하여 "안전하지 않은"것입니까? 더 자세한 설명과 코드 예제가 없어도 대답하기가 어렵습니다. – alfasin
코드 예제는 모든 사람들이 귀하의 질문을 이해하는 데 도움이됩니다. – Dongqing
'레거시'는 기존 코드입니까? 싱글 톤은 항상 스레드로부터 안전해야하기 때문에 근본적으로 손상된 것처럼 보입니다 (또는 단순히 멀티 스레드 액세스 용으로 설계되지 않은 것 같습니다). 해당 코드를 변경할 수있는 범위가 있습니까? –