ThreadPoolExecutor - Core and maximum pool sizes

user2568266 picture user2568266 · Jul 15, 2013 · Viewed 27.3k times · Source

When a new task is submitted in method execute(java.lang.Runnable),and fewer than corePoolSize 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 than maximumPoolSize 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?

Answer

taynguyen picture taynguyen · Jan 27, 2016

Here are Sun’s rules for thread creation in simple terms:

  1. If the number of threads is less than the corePoolSize, create a new Thread to run a new task.
  2. If the number of threads is equal (or greater than) the corePoolSize, put the task into the queue.
  3. If the queue is full, and the number of threads is less than the maxPoolSize, create a new thread to run tasks in.
  4. If the queue is full, and the number of threads is greater than or equal to maxPoolSize, reject the task.

Full article