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.