我正在創建一個需要多個進程並行運行的應用程序。要運行的進程數是動態的,它取決於接收到的輸入。例如,如果用戶想要關於三種不同的事物[汽車,自行車,汽車]的信息,那麼我需要三個獨立的線程來並行運行每一個線程。對使用ExecutorService創建的最大線程數有任何限制
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
是的。對於每個請求,都會創建一個單獨的執行程序實例。 –