首页 > 解决方案 > 使用 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 有关,但据我了解,我没有更改循环的数据结构。有人可以帮我理解为什么这仍然是并发修改吗?

标签: java

解决方案


推荐阅读