使用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) 个答案