ErroneousThreadPoolConstructorChecker
Thread pool size will never go beyond corePoolSize if an unbounded queue is used

Severity
WARNING

The problem

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));

Suppression

Suppress false positives by adding the suppression annotation @SuppressWarnings("ErroneousThreadPoolConstructorChecker") to the enclosing element.