Here are Sun's rules for thread creation in simple terms:
- If the number of threads is less than the corePoolSize, create a new Thread to run a new task.
- If the number of threads is equal (or greater than) the corePoolSize, put the task into the queue.
- If the queue is full, and the number of threads is less than the maxPoolSize, create a new thread to run tasks in.
- If the queue is full, and the number of threads is greater than or equal to maxPoolSize, reject the task.
Why create non-core-thread when queue is full? I don't see why they have done it this way. Why not create a non-core-thread when queue is empty?