我有各种型号,我依次逐个执行这些模型。我将有大约200个型号。
下面是我的代码,我逐个执行这些模型
Map<String, List<ServerMetrics>> metricsHolder = new HashMap<String, List<ServerMetrics>>();
for (String alias : serverNames) {
List<ClientsModel> modelMetadata = getModelAttributes();
List<MachineInfo> machineInfo = getMachineInfo();
List<ServerMetrics> metricsList = new ArrayList<ServerMetrics>();
// calling model one by one sequentially
// is there any way to make this multithreaded?
// here modelMetadata size might be 100 or 200
for (ClientsModel modelList : modelMetadata) {
String modelValue = modelList.getModelValue();
String modelId = String.valueOf(modelList.getModelId());
// execute my model here and storing the metrics in the metricsList object
ServerMetrics metrics = TestUtils.executeModelMetrics(machineInfo, modelValue);
metrics.setModelId(modelId);
metricsList.add(metrics);
}
metricsHolder.put(alias, dynMetricsList);
}
问题陈述: -
我们有什么办法可以让模型执行多线程,然后将结果存储到metricsList
对象中?
答案 0 :(得分:3)
如果代码中没有数据竞争条件(对未正确同步的相同数据进行多线程访问),则可以使用ExecutorService
形式的线程池来运行{线程上的{1}}实现。您可以在Callable
。
在主线程上,Callable
返回ExecutorService
,然后您可以在生成所有任务后等待。{/ p>
线程池的大小(此处设置为Future
,但您可以更改它)确定并行运行的数量。您仍然可以执行比线程池大小更多的10
。
Callable