728x90
public class Singleton {
private static Singleton instance = null;
private Singleton() {
// Private Constructor
}
/**
* Multi thread 동기화해결을 위한 synchronized
* 동시 접근으로 인한 인스턴스 중복 생성 문제 해결.
* 인스턴스를 리턴 받을때마다 Thread 동기화로 인해 불필요한 lock이 자주 발생할 수 있어, 낭비가 큼.
*
*/
public synchronized static Singleton getInstance() {
if (instance == null) { instance = new Singleton(); }
return instance;
}
}
LazyHolder 방식의 싱글톤을 사용하자!!
public class LazyHolderSingleton {
private String mName = null;
private LazyHolderSingleton() {
// private Constructor
}
public static LazyHolderSingleton getInstance() {
return LazyHolder.INSTANCE;
}
public String getName() { return mName; }
/**
* LazyHoler 를 통해 싱글톤의 동시성 문제 해결방법.
* synchronized 를 사용하지 않음.
* JAVA 버전에 상관없음.
* JVM 에서 클래스 로딩 -> 초기화할 경우 원자성 보장으로 Thread safety
*/
private static class LazyHolder {
private static final LazyHolderSingleton INSTANCE = new LazyHolderSingleton();
}
}
728x90