複数のプロセスを同時に実行する必要があるアプリケーションを作成しています。実行するプロセスの数は動的であり、受け取った入力に依存します。ExecutorServiceを使用して作成されるスレッドの最大数に制限がありますか
たとえば、3つの異なるものについての情報が必要な場合(車、自転車、自動車)、3つのスレッドをそれぞれ並列に実行する必要があります。
numberOfThreadsNeeded = getNumberOfThingsFromInput();
ExecutorService executor = Executors.newFixedThreadPool(numberOfThreadsNeeded);
コードスニペット:
パブリッククラスConsoleController {
private static final Log LOG = LogFactory.getLog(ConsoleController.class);
@Autowired
ConsoleCache consoleCache;
Metrics metrics;
public List<Feature> getConsoleData(List<String> featureIds, Map<String, Object> input, Metrics metrics) {
this.metrics = metrics;
List<FeatureModel> featureModels =
featureIds
.stream()
.map(consoleCache::getFeature)
.collect(toList());
Integer numberOfThreadsNeeded = getThreadCount(featureModels);
ExecutorService executor = Executors.newFixedThreadPool(numberOfThreadsNeeded);
featureModels.stream()
.map(f -> (Callable<Result>)() -> f.fetchData(input, metrics))
.map(executor::submit)
.collect(toList()));
作成するスレッドの数は、1から100まで変化は、初期化時にthread pool
サイズを定義することは安全ですか? また、parallel
に100 threads
を実行するのが安全かどうかを知りたいですか?
ユーザーごとに最新のエグゼキュータを作成していますか? – Ruslan
はい。要求ごとに、別のエグゼキュータ・インスタンスが作成されます。 –