Spring @Async limit number of threads Spring @Async limit number of threads multithreading multithreading

Spring @Async limit number of threads


If you are using Spring's Java-configuration, your config class needs to implements AsyncConfigurer:

@Configuration@EnableAsyncpublic class AppConfig implements AsyncConfigurer {    [...]    @Override    public Executor getAsyncExecutor() {        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();        executor.setCorePoolSize(2);        executor.setMaxPoolSize(5);        executor.setQueueCapacity(50);        executor.setThreadNamePrefix("MyExecutor-");        executor.initialize();        return executor;    }}

See @EnableAsync documentation for more details : http://docs.spring.io/spring/docs/3.1.x/javadoc-api/org/springframework/scheduling/annotation/EnableAsync.html


Have you checked out Task Executor? You can define a Thread Pool, with a maximum number of threads to execute your tasks.

If you want to use it with @Async, use this in your spring-config:

<task:annotation-driven executor="myExecutor" scheduler="myScheduler"/><task:executor id="myExecutor" pool-size="5"/><task:scheduler id="myScheduler" pool-size="10"/>

Full reference here (25.5.3). Hope this helps.


Since spring boot 2.1 you can use auto configuration and change the maximum number of threads in the application properties file

spring.task.execution.pool.max-size=4

See the full documentation:
https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-features-task-execution-scheduling