우리는 Java에서 스레드 안전 싱글 톤 클래스를 사용한다고 가정합니다.이 클래스는이를 사용하는 가장 좋은 방법입니다. 예를 들어, 우리가 싱글 톤 클래스가 있는지 고려해Java에서 싱글 톤을 사용하는 가장 좋은 방법
public class MySingleTon {
// my thread-safe code goes here
}
을 다음과 같이 우리는 두 가지 방법으로 위의 싱글 톤을 사용하는 서비스 클래스가 있습니다
1 :
public class MyService {
MySingleton singleton;
public void myMethod1() {
singleton = MySingleton.getInstance();
// code ...
}
public void myMethod2() {
singleton = MySingleton.getInstance();
// code...
}
public void myMethod3() {
singleton = MySingleton.getInstance();
// code...
}
}
또는
2 :
public class MyService {
public void myMethod1() {
MySingleton singleton = MySingleton.getInstance();
// code ...
}
public void myMethod2() {
MySingleton singleton = MySingleton.getInstance();
// code...
}
public void myMethod3() {
MySingleton singleton = MySingleton.getInstance();
// code...
}
}
싱글 톤이 인스턴스 변수를 통해 참조되는 경우와 경우 2에서 싱글 톤은 메소드 로컬 변수로 참조됩니다. 위의 스 니펫이 멀티 스레드 환경에서 사용되는 것을 고려하면 더 나은 옵션이며 그 이유는 무엇입니까?
이 질문은 우리가 당신의 싱글 톤에 대한 세부 사항을 알지 못하고 정확히 어떻게 사용할지 모르기 때문에 매우 광범위합니다. 예를 들면 : 싱글 톤 인스턴스가 변경 가능하고,'myMethod'가 싱글 톤의 상태를 변경하려고합니까, 동기화 될 수 있습니까? – Pshemo
내가 thread-safe (변경할 수없는 상태에 동기화 된 액세스로 변경 가능하거나 변경할 수 없음) 할 때 모든 경우를 다루지 않습니까? 아니, 여기에 당신의 질문을 훼손하고 있지만, 내가 여기에 아무것도 놓친 경우에만 궁금해. – user3244615
어떤 클래스가 thread-safe로 간주된다고해도, thread가 안전하지 않은 방식으로 사용할 수 있습니다. 예를 들어,'method1'은 자신의 singleton 상태를 설정하고이 상태가 그대로 유지된다는 가정하에 다른 작업을 수행 할 수 있습니다. 그러나 동시에'method2'는이 상태를 다른 것으로 바꾸려고 시도 할 수 있습니다. 그것은 당신의 경우에 문제가 될 것입니까? 가능할까요? – Pshemo