When a new task is submitted in method
execute(java.lang.Runnable),and fewer thancorePoolSizethreads 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
corePoolSizebut less thanmaximumPoolSizethreads 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