我的问题与这一问题非常相似:@Async prevent a thread to continue until other thread have finished
基本上,我需要在更多线程中运行〜数百个计算。我只想运行一些并行线程,例如具有5个计算的5个线程在paralell中。
我正在使用spring框架,@ Async选项是自然选择。我不需要全功能的JMS队列,这对我来说有点麻烦。
任何想法?谢谢
您是否已签出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"/>
完整参考here(25.5.3)。希望这会有所帮助。
如果您使用的是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;
}
}
请参阅@EnableAsync
文档以获取更多详细信息:http://docs.spring.io/spring/docs/3.1.x/javadoc-api/org/springframework/scheduling/annotation/EnableAsync.html
自spring boot 2.1起],您可以使用自动配置并更改应用程序属性文件中的最大线程数
spring.task.execution.pool.max-size=4