私の質問はこれに非常に似ています:@Asyncは、他のスレッドが終了するまでスレッドが続行しないようにします
基本的に、より多くのスレッドで数百の計算を実行する必要があります。並列スレッドをいくらか実行したいのですが、たとえば5つの計算で5つのスレッドを並列に実行します。
私はSpringFrameworkを使用しており、@Asyncオプションは当然の選択です。フル機能のJMSキューは必要ありません。これは、私にとっては少しオーバーヘッドです。
何か案は ?ありがとうございました
私の質問はこれに非常に似ています:@Asyncは、他のスレッドが終了するまでスレッドが続行しないようにします
基本的に、より多くのスレッドで数百の計算を実行する必要があります。並列スレッドをいくらか実行したいのですが、たとえば5つの計算で5つのスレッドを並列に実行します。
私はSpringFrameworkを使用しており、@Asyncオプションは当然の選択です。フル機能のJMSキューは必要ありません。これは、私にとっては少しオーバーヘッドです。
何か案は ?ありがとうございました
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
チェックアウトしました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)。お役に立てれば。
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