Back to Error Prone

ErroneousThreadPoolConstructorChecker

docs/bugpattern/ErroneousThreadPoolConstructorChecker.md

2.49.0821 B
Original Source

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:

java
new ThreadPoolExecutor(
    /* corePoolSize= */ 1,
    /* maximumPoolSize= */ 10,
    /* keepAliveTime= */ 60,
    TimeUnit.SECONDS,
    new LinkedBlockingQueue<>());

Good:

java
new ThreadPoolExecutor(
    /* corePoolSize= */ 10,
    /* maximumPoolSize= */ 10,
    /* keepAliveTime= */ 60,
    TimeUnit.SECONDS,
    new LinkedBlockingQueue<>());
java
new ThreadPoolExecutor(
    /* corePoolSize= */ 1,
    /* maximumPoolSize= */ 10,
    /* keepAliveTime= */ 60,
    TimeUnit.SECONDS,
    new LinkedBlockingQueue<>(QUEUE_CAPACITY));