When a new task is submitted in method
execute(java.lang.Runnable)
,and fewer thancorePoolSize
threads are running, a new thread is created to handle the request, even if other worker threads are idle.
1) Why there is a need to create a new thread to handle the request if there are idle threads?
If there are more than
corePoolSize
but less thanmaximumPoolSize
threads running, a new thread will be created only if the queue is full.
2) I don't understand the difference between corePoolSize
and maximumPoolSize
here. Secondly, how can a queue be full when threads are less than maximumPoolSize
? Queue can only be full if threads are equal to or more than maximumPoolSize
. Isn't it?
The default configuration of core pool size is 1, max pool size and queue capacity as 2147483647. This is roughly equivalent to Executors. newSingleThreadExecutor(), sharing a single thread for all tasks.
If corePoolSize or more threads are running, the Executor always prefers queuing a request rather than adding a new thread. If a request cannot be queued, a new thread is created unless this would exceed maximumPoolSize , in which case, the task will be rejected.
To set the maximum pool size: n is the number of connections allowed per pool, from 1 to 2,147,483,647 (the default).
Here are Sun’s rules for thread creation in simple terms:
Full article
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With