Parallel For Loop java有竞争条件

时间:2016-11-10 16:58:47

标签: java parallel-processing

我有一段代码在循环中运行,我希望并行化。 ExecutorService的使用使得代码非常快,但是我得到了不一致的结果,可能是由于竞争条件。是否存在另一个并行for循环,它像这一个一样快速运行并始终保持一致?

ExecutorService exec = Executors.newFixedThreadPool(8);

    try{
        for (String tour : tours)
            {
                if (valid)
                {
                   exec.submit(() ->
                     {
                        double len1 = tsp.tourLen(tour, cities); //expensive sequentially
                        if (bestLen == -1 || len1 < bestLen)
                        {
                            bestLen = len1;
                            bestTour = tour;
                        }
                    });
                }
            }

            System.out.println("\n     Best tour len: " + bestLen);
            System.out.println("\n          Best tour: " + bestTour);

        } finally
        {
            exec.shutdown();
        }

1 个答案:

答案 0 :(得分:0)

我这样做的方法是在后台线程中进行繁重的处理,将其加载到HashMap<String, Double>中,以避免并发问题。 (tour,len1)

然后使用foreach lambda hashmap.foreach((k,v) -> /*comparison here*/);

遍历该地图

注意:

虽然我上面提到过同步,但是对于这个问题,我怀疑它会有所帮助,因为,你无法比较你还没有的数据。

源: How to for each the hashmap?