33

私の質問はこれに非常に似ています:@Asyncは、他のスレッドが終了するまでスレッドが続行しないようにします

基本的に、より多くのスレッドで数百の計算を実行する必要があります。並列スレッドをいくらか実行したいのですが、たとえば5つの計算で5つのスレッドを並列に実行します。

私はSpringFrameworkを使用しており、@Asyncオプションは当然の選択です。フル機能のJMSキューは必要ありません。これは、私にとっては少しオーバーヘッドです。

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

4

3 に答える 3

40

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

于 2014-05-07T08:12:37.110 に答える
20

チェックアウトしました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)。お役に立てれば。

于 2012-11-03T06:54:51.867 に答える
10

Spring Boot 2.1以降、自動構成を使用して、アプリケーションプロパティファイルのスレッドの最大数を変更できます。

spring.task.execution.pool.max-size=4

完全なドキュメントを参照してください:
https ://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-features-task-execution-scheduling

于 2019-10-03T08:44:05.883 に答える