如何并行执行多个模型而不是顺序执行?

时间:2015-01-18 06:56:11

标签: java multithreading thread-safety executorservice callable

我有各种型号,我依次逐个执行这些模型。我将有大约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对象中?

1 个答案:

答案 0 :(得分:3)

如果代码中没有数据竞争条件(对未正确同步的相同数据进行多线程访问),则可以使用ExecutorService形式的线程池来运行{线程上的{1}}实现。您可以在Callable

中完成工作

在主线程上,Callable返回ExecutorService,然后您可以在生成所有任务后等待。{/ p>

线程池的大小(此处设置为Future,但您可以更改它)确定并行运行的数量。您仍然可以执行比线程池大小更多的10

Callable