Ma question est très similaire à celle-ci: @ Async empêche un thread de continuer jusqu'à ce que l'autre thread soit terminé
Fondamentalement, j'ai besoin d'exécuter ~ des centaines de calculs dans plus de threads. Je veux exécuter seulement une certaine quantité de threads parallèles, par exemple 5 threads avec 5 calculs en parallèle.
J'utilise le framework Spring et l'option @Async est un choix naturel. Je n'ai pas besoin d'une file d'attente JMS complète, c'est un peu trop pour moi.
Des idées ? Je vous remercie
Avez-vous vérifié Task Executor
? Vous pouvez définir un pool de threads, avec un nombre maximum de threads pour exécuter vos tâches.
Si vous souhaitez l'utiliser avec @Async
, utilisez ceci dans votre configuration de printemps:
<task:annotation-driven executor="myExecutor" scheduler="myScheduler"/>
<task:executor id="myExecutor" pool-size="5"/>
<task:scheduler id="myScheduler" pool-size="10"/>
Référence complète ici (25.5.3). J'espère que cela t'aides.
Si vous utilisez la configuration Java de Spring, votre classe de configuration doit implémenter 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;
}
}
Voir @EnableAsync
documentation pour plus de détails: http://docs.spring.io/spring/docs/3.1.x/javadoc-api/org/springframework/scheduling/annotation/EnableAsync.html