gpt4 book ai didi

java - 当多个用户在 HashMap 上操作时出现 ConcurrentModificationException

转载 作者:行者123 更新时间:2023-11-29 05:54:57 25 4
gpt4 key购买 nike

我有一个 HashMap,它存储 ID 和 Name 对。对于这个映射的每个条目,有条件地,我将把它放在另一个 HashMap 中。最后,我将对第二个 map 条目进行一些操作。所有这些代码都写在 JSP 文件中。

对于单个用户请求,这工作正常。当多个用户同时尝试访问此文件时,只有一个请求成功,其他用户也会产生相同的结果。

我们可以在日志中看到如下异常:

org.apache.jasper.JasperException: java.util.ConcurrentModificationException

map 是这种格式

Map<String, String> testmap= new HashMap<String, String>();

最佳答案

来自 java.util.HashMap 的 java 文档:

The iterators returned by all of this class's "collection view methods" are fail-fast: if the map is structurally modified at any time after the iterator is created, in any way except through the iterator's own remove method, the iterator will throw a ConcurrentModificationException. Thus, in the face of concurrent modification, the iterator fails quickly and cleanly, rather than risking arbitrary, non-deterministic behavior at an undetermined time in the future.

如前所述,最简单的解决方案是同步对同时迭代/修改的 Map 的访问。

Map map = ... //the map object has to be the same for all users calling your jsp

synchronized(map) {
//do work
}

另见 oracle java tutorial about concurrency .

关于java - 当多个用户在 HashMap 上操作时出现 ConcurrentModificationException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12554647/

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