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