Spring @Async ограничить количество потоков
мой вопрос очень похож на этот : @Async предотвратите продолжение потока до завершения другого потока
в основном мне нужно запустить ~ сотни вычислений в несколько потоков. Я хочу работать только некоторое количество параллельных потоков, например, 5 потоков с 5 computationis соединенных параллельно.
Я использую Spring framework, а опция @Async-естественный выбор. Мне не нужна полнофункциональная очередь JMS, это немного накладно для меня.
любые идеи ? Спасибо
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"/>
полная ссылка здесь (25.5.3). Надеюсь, это поможет.
Если вы используете Java-конфигурацию Spring, ваш класс 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