synchronized singleton
public class TestService {
private static TestService instance;
public TestService() {
}
public static synchronized TestService getInstance() {
if (instance == null) {
instance = new TestService();
}
return instance;
}
- synchronized 키워드를 사용한 싱글톤 구현 방식
- 이러한 전통적인 싱글톤 구현 방식은 멀티스레드 환경에서 성능 저하를 초래할 수 있음
- synchronized 키워드를 사용하면 해당 메서드나 블록에 동시에 하나의 스레드만 접근 가능
- 그래서 꼭 필요한 경우가 아니면 성능을 위해서 쓰지말자 !
Bill Pugh Singleton
public class TestService {
private TestService() {
}
private static class SingletonHelper {
private static final TestService INSTANCE = new TestService();
}
public static TestService getInstance() {
return SingletonHelper.INSTANCE;
}
}
- Bill Pugh 싱글톤 구현 방식은 java의 클래스 로딩 메커니즘을 활용하여, 멀티스레드 환경에서도 동기화 문제 없이 싱글톤 인스턴스를 효율적으로 생성할 수 있는 방법이다.
- 이 방식은 내부 정적(static) 헬퍼 클래스를 사용하여 싱글톤 인스턴스를 생성함
- 구현 방법
- TestService 클래스는 외부에서 인스턴스를 생성하지 못하도록 생성자를 private 로 선언한다.
- 싱글톤 인스턴스는 SingletonHelper 라는 내부 정적 클래스 내에 정의되어 있으며, 이 인스턴스에 접근하기 위한 'getInstance()' 메서드를 통해 제공된다.
- TestService 클래스는 getInstance 메서드가 호출될 때 처음으로 참조되므로, 이 시점에 TestService 인스턴스가 생성된다.