gpt4 book ai didi

java - 无法同步(java.util.ConcurrentModificationException)

转载 作者:行者123 更新时间:2023-12-01 13:09:22 25 4
gpt4 key购买 nike

我有以下 Java 代码:

private Object guiUpdateLock = new Object();

public void updateLinkBar(SortedSet<Arbitrage> arbitrages) {
synchronized (guiUpdateLock) {
System.out.println("start");
for (Arbitrage arbitrage : arbitrages) {
//do some GUI stuff
}
System.out.println("end");
}
}

updateLinkBar() 是从许多线程调用的,有时我会在“for”循环中得到 java.util.ConcurrentModificationException。但我不明白为什么,因为我正在对对象进行锁定,但这显然不起作用,因为我可以在输出中连续看到两个“开始”。

提前谢谢您。

最佳答案

锁必须保护对象而不是代码段。

在您的情况下,您接受任意集合,获取您的私有(private)锁,并对该集合进行操作。同时,您的其余代码可以在其他线程中对集合执行任何它想要的操作,并且不需要争用您的私有(private)锁来执行此操作。

您必须重新设计代码,以便对相关集合的所有访问都由同一锁覆盖。

关于java - 无法同步(java.util.ConcurrentModificationException),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23011480/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com