I\'m using Spring 4.3.8.RELEASE with Java 7. I want to create a thread pool to execute tasks so I have set up the following in my Spring contxet
Setting maxPoolSize implicitly allows for tasks to get dropped.
However, the default queue capacity is Integer.MAX_VALUE, which, for practical purposes, is infinity.
Something to watch out for is that ThreadPoolTaskExecutor uses a ThreadPoolExecutor underneath, which has a somewhat unusual approach to queueing, described in the docs:
If
corePoolSizeor more threads are running, the Executor always prefers queuing a request rather than adding a new thread.
This means that maxPoolSize is only relevant when the queue is full, otherwise the number of threads will never grow beyond corePoolSize.
As an example, if we submit tasks that never complete to the thread pool:
corePoolSize submissions will start a new thread each;maxPoolSize;