앞선 상황을 다음과 같이 세분화된 전략으로 치환한다면 상황을 대응할 수 있습니다
즉, 커스텀 풀 전략을 사용해서 상황에 맞게 유연하게 대응할 수 있도록 전략을 세우면 됩니다
ExecutorService service = new ThreadPoolExecutor(200, 300, 60, TimeUnit.SECONDS, new ArrayBlockingQueue<>(500));
위와같이 설정하면 200개의 기본스레드와 100개의 초과 스레드를 사용할 수 있습니다
초과 스레드는 60초의 수명을 가지며 1000개의 작업이 큐에 대기할 수 있습니다
500개 이하의 작업이 큐에 담겨있으면 200개의 기본 스레드가 처리합니다
큐에 담긴 작업이 500개를 초과하면 200개의 기본 스레드와 100개의 초과 스레드가 처리합니다
초과 스레드를 투입해도 큐에 담긴 작업이 500개를 초과하며 초과 스레드 개수도 오버한 상황이 ㄴ경우,
예외를 발생시킵니다
new ThreadPoolExecutor(200, 300, 60, TimeUnit.SECONDS, new LinkedBlockingQueue());
위와같이 설정하면 큐가 최대 사이즈만큼 늘어나지 않습니다
큐가 가득차야지 긴급 상황으로 인지하는데 LinkedBlockingQueue를 기본생성자를 통해
무한대의 사이즈로 사용하면 큐가 가득찰 수 없습니다
따라거 기본 스레드 100개만으로 무한대의 작업을 처리해야하므로 이런 경우를 주의해서 피해야합니다