인스턴스를 오직 한개만 제공하는 클래스
public class Settings {
}
public static void main(String[] args) {
Settings settings = new Settings();
Settings settings1 = new Settings();
System.out.println(settings == settings1);
}
public class Settings {
private static Settings instance;
private Settings() {}
public static Settings getInstance() {
if( instance == null ) instance = new Settings();
return instance;
}
}
public static void main(String[] args) {
Settings settings = Settings.getInstance();
Settings settings1 = Settings.getInstance();
System.out.println(settings == settings1);
}
→ 같은 인스턴스를 반환을 하여 true가 나오게 된다.
다음과 같은 상황에서도 같은 인스턴스를 반환할까?
public static void main(String[] args) throws InterruptedException {
Thread thread = new Thread(
()->{
Settings settings1 = Settings.getInstance();
settingsList.add(settings1);
System.out.println(settings1);
}
);
Thread thread2 = new Thread(
()->{
Settings settings2 = Settings.getInstance();
settingsList.add(settings2);
System.out.println(settings2);
}
);
thread.start();
thread2.start();
Thread.sleep(2000);
Settings settings1 = settingsList.pop();
Settings settings2 = settingsList.pop();
System.out.println(settings1 == settings2); // ??
}
정답은 true일수고 false일수도 있다. → 멀티 쓰레드 환경에서는 객체 생성 전 동시에 접근하면 다른 인스턴스가 만들어 질수 있다.