CachedThreadPool은 장기 실행 스레드에 대해 사용하는 데 부정적인 결과가 없으므로 상황에 맞게 사용해야합니다. 짧은 작업에 적합한 CachedThreadPools에 대한 Java 문서의 주석은 단순히 이러한 경우에 특히 적합하다는 것을 암시하며, 장기 실행 작업과 관련된 작업에 사용할 수 없거나 사용해서는 안된다는 의미가 아닙니다.
더 자세히 설명하기 위해 Executors.newCachedThreadPool 및 Executors.newFixedThreadPool 은 모두 다른 매개 변수를 사용하는 동일한 스레드 풀 구현 (적어도 개방형 JDK에서)에 의해 지원됩니다. 차이점은 스레드 최소, 최대, 스레드 종료 시간 및 큐 유형입니다.
public static ExecutorService newFixedThreadPool(int nThreads) {
return new ThreadPoolExecutor(nThreads, nThreads,
0L, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<Runnable>());
}
public static ExecutorService newCachedThreadPool() {
return new ThreadPoolExecutor(0, Integer.MAX_VALUE,
60L, TimeUnit.SECONDS,
new SynchronousQueue<Runnable>());
}
FixedThreadPool은 실제로 고정 된 수의 스레드로 작업하고 싶을 때 장점이 있습니다. 그런 다음 스레드 수가 지정된 수준으로 유지 될 것임을 알면서 실행 프로그램 서비스에 원하는 수의 작업을 제출할 수 있기 때문입니다. 스레드 수를 명시 적으로 늘리려면 이것은 적절한 선택이 아닙니다.
그러나 이것은 CachedThreadPool에서 발생할 수있는 한 가지 문제는 동시에 실행되는 스레드 수를 제한하는 것과 관련이 있음을 의미합니다. CachedThreadPool은이를 제한하지 않으므로 너무 많은 스레드를 실행하지 않도록 자체 코드를 작성해야 할 수 있습니다. 이것은 실제로 응용 프로그램의 디자인과 실행 프로그램 서비스에 작업을 제출하는 방법에 따라 다릅니다.