web-dev-qa-db-ja.com

Spring @Asyncスレッドの制限数

私の質問はこれと非常に似ています: @ Asyncは他のスレッドが完了するまでスレッドが続行するのを防ぎます

基本的に私はより多くのスレッドで数百もの計算を実行する必要があります。並列スレッドの一部だけを実行したいです。 5つの計算を伴う5つのスレッドは並列です。

私は春のフレームワークを使用しており、@ Asyncオプションは自然な選択です。フル機能のJMSキューは必要ありません。これは少しオーバーヘッドです。

何か案は ?ありがとうございました

26
Martin V.

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)。お役に立てれば。

17
jelies

SpringのJava構成を使用している場合、構成クラスは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

29
Siggen