一尘不染

Spring @Async限制线程数

spring

基本上我需要在更多线程中运行〜数百个计算。我只想在paralell中运行一些并行线程,例如5个线程和5个计算。

我正在使用spring框架,@Async选项是自然选择。我不需要全功能的JMS队列,这对我来说有点麻烦。

有任何想法吗 ?谢谢


阅读 2471

收藏
2020-04-19

共2个答案

一尘不染

你检查了Task Executor吗?你可以定义一个线程池,其中包含最大数量的线程来执行任务。

如果要与结合@Async使用,请在spring-config中使用它:

<task:annotation-driven executor="myExecutor" scheduler="myScheduler"/>

<task:executor id="myExecutor" pool-size="5"/>

<task:scheduler id="myScheduler" pool-size="10"/>
2020-04-19
一尘不染

如果你使用的是Spring的Java配置,则你的config类需要实现AsyncConfigurer

@Configuration
@EnableAsync
public 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;
    }
}
2020-04-19