인스턴스를 오직 한개만 제공하는 클래스

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일수도 있다. → 멀티 쓰레드 환경에서는 객체 생성 전 동시에 접근하면 다른 인스턴스가 만들어 질수 있다.