有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

使用fork/join的Java并发修改

在为我的fork/join构建计算函数时,我发现使用fork/join进行并发修改时出错。我知道这与你正在循环的结构的同时修改有关。然而,在我的代码中,我看不到这种情况(hmap在这里作为类变量是一个常规哈希映射):

public void compute() {
        if (left < right) {
            int mid = (left + right) / 2;
            CHTcounter leftSort = new CHTcounter(array, left, mid,hmap);
            CHTcounter rightSort = new CHTcounter(array, mid + 1, right,hmap);
            leftSort.fork();
            rightSort.compute();
            leftSort.join();

            leftSort.hmap.entrySet()
                        .forEach(entry -> rightSort.hmap.merge(
                                entry.getKey(),
                                entry.getValue(),
                                (key, value) -> entry.getValue() + value));
                hmap = rightSort.hmap;
        }else{
            array[left].getUsers().forEach((el) -> {
                    hmap.put(el,1);
                });
        }
    }

该错误与if代码块中的for each有关,但据我所知,我并没有改变正在循环的数据结构。有人能帮我理解为什么这仍然是并发修改吗


共 (0) 个答案