Whenever a ThreadPoolExecutor is constructed with an unbounded workQueue,
the pool size will never go beyond corePoolSize. Using maximumPoolSize
greater than corePoolSize in such case will not have any impact on the maximum
bound of pool size.
Bad:
new ThreadPoolExecutor(
/* corePoolSize= */ 1,
/* maximumPoolSize= */ 10,
/* keepAliveTime= */ 60,
TimeUnit.SECONDS,
new LinkedBlockingQueue<>());
Good:
new ThreadPoolExecutor(
/* corePoolSize= */ 10,
/* maximumPoolSize= */ 10,
/* keepAliveTime= */ 60,
TimeUnit.SECONDS,
new LinkedBlockingQueue<>());
new ThreadPoolExecutor(
/* corePoolSize= */ 1,
/* maximumPoolSize= */ 10,
/* keepAliveTime= */ 60,
TimeUnit.SECONDS,
new LinkedBlockingQueue<>(QUEUE_CAPACITY));
Suppress false positives by adding the suppression annotation @SuppressWarnings("ErroneousThreadPoolConstructorChecker") to the enclosing element.