1.일정 개수의 스레드가 미리 생성됨 (FixedThreadPool(5) -> 5개의 스레드 유지)
2. 사용자가 작업을 요청하면, 대기 중인 스레드가 실행됨
3. 작업이 끝난 스레드는 다시 풀로 반환되어 재사용됨
4. 스레드 개수가 부족하면 새로운 작업은 대기 큐에 저장됨
5. shutdown()을 호출하면 더 이상 새로운 작업을 받지 않고, 실행 중인 작업이 끝나면 스레드 종료
FixedThreadPool
고정된 개수의 스레드를 유지 (n개)
큐(queue)에 작업을 쌓아두고 대기
일정한 개수의 작업을 처리할 때 적합 (예: CPU 바운드 작업)
CachedThreadPool
필요할 때 스레드를 동적으로 생성 및 재사용
새로운 스레드를 생성하여 즉시 실행
짧은 작업을 빠르게 처리해야 할 때 적합 (예: I/O 바운드 작업)
shutdown()