Object 의 쓰레드 관련 메소드들

📁 ex01

☕ PhoneBooth.java

public class PhoneBooth {
    synchronized public void phoneCall (SoldierRun soldier) {
        System.out.println("☎️ %s 전화 사용중...".formatted(soldier.title));

        try { Thread.sleep(500);
        } catch (InterruptedException e) {}

        System.out.println("👍 %s 전화 사용 완료".formatted(soldier.title));

        //  💡 아래를 해제하지 않으면 첫 사용자가 혼자 다 씀
        //  ℹ️ 단, JDK 제품마다 차이가 있을 수 있습니다.
        //notifyAll();
        //try {
        //    //  💡 현 사용자를 폰부스에서 내보냄
        //    //  - sleep처럼 아래의 예외 반환 확인
        //    wait();
        //} catch (InterruptedException e) {
        //    throw new RuntimeException(e);
        //}
    }
}

☕ SoldierRun.java

public class SoldierRun implements Runnable {
    String title;
    PhoneBooth phoneBooth;

    public SoldierRun(String title, PhoneBooth phoneBooth) {
        this.title = title;
        this.phoneBooth = phoneBooth;
    }
    @Override
    public void run() {
        while (true) {
            phoneBooth.phoneCall(this);
        }
    }
}

☕ Main.java

				PhoneBooth phoneBooth = new PhoneBooth();

        Arrays.stream("김병장,이상병,박일병,최이병".split(","))
                .forEach(s -> new Thread(
                        new SoldierRun(s, phoneBooth)
                ).start());

생산자와 소비자 모델

📁 ex02

☕ CoffeeMachine.java