私の質問はこれと非常に似ています: @ Asyncは他のスレッドが完了するまでスレッドが続行するのを防ぎます
基本的に私はより多くのスレッドで数百もの計算を実行する必要があります。並列スレッドの一部だけを実行したいです。 5つの計算を伴う5つのスレッドは並列です。
私は春のフレームワークを使用しており、@ Asyncオプションは自然な選択です。フル機能のJMSキューは必要ありません。これは少しオーバーヘッドです。
何か案は ?ありがとうございました
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の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