쓰레드 풀

쓰레드 풀 자전거 대여 업체
쓰레드 업체 소유 자전거
(대수 지정, 사용 후 반납 & 재사용)
Runnable 이용자
(자전거가 모두 이용중이면 대기)

🪣 동굴 물 퍼내기 예제

📁 ex01

☕ Cave.java

public class Cave {
    private int water = 40;

    public int getWater() {
        return water;
    }
    public void pump() {
        if (getWater() > 0) water--;
    }
}

☕ VolunteerRun.java

public class VolunteerRun implements Runnable {
    private static int lastNo = 0;
    private static int working = 0;
    
    private int no;
    private Cave cave;
    
    public VolunteerRun(Cave cave) {
        this.no = ++lastNo;
        this.cave = cave;

        System.out.printf(
                "🦺 %d번 지원자 투입 (남은 물 양: %d)%n", no, cave.getWater()
        );
    }

    @Override
    public void run() {
        working++;
        System.out.printf(
                "🪣 %d번 지원자 시작 (현재 %d명 펌핑중, 남은 물 %d)%n",
                no, working, cave.getWater()
        );

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

            //  💡 아래의 return이 없다면 shutdownNow를 해도 중단되지 않음
            //  - 주석해제하고 shutdownNow 버전으로 다시 실행해 볼 것
            //working--;
            //System.out.printf(
            //        "🛑 %d번 지원자 중단 (현재 %d명 펌핑중, 남은 물 %d)%n",
            //        no, working, cave.getWater()
            //);
            //return;
        }

        cave.pump();
        working--;
        System.out.printf(
                "✅ %d번 지원자 완료 (현재 %d명 펌핑중, 남은 물 %d)%n",
                no, working, cave.getWater()
        );
    }
}

☕ Main.java