【发布时间】:2014-09-05 15:10:20
【问题描述】:
我正在尝试使用 ConcurrentHashMap 的故障安全示例。
下面是我试过的示例 sn-p..
ConcurrentHashMap<String, String> cMap = new ConcurrentHashMap<String, String>();
cMap.put("1", "Windows Phone");
cMap.put("2", "iPhone");
cMap.put("3", "HTC");
Iterator iterator=cMap.keySet().iterator();
while (iterator.hasNext()) {
System.out.println(cMap.get(iterator.next()));
cMap.put("Samsung", "S5");
}
输出是:
Windows Phone
HTC
iPhone
这是一个我理解的故障安全示例。
但是当我尝试下面的示例时,我得到了不同的输出。
ConcurrentHashMap<String, String> cMap = new ConcurrentHashMap<String, String>();
cMap.put("1", "Windows Phone");
cMap.put("2", "iPhone");
cMap.put("3", "HTC");
Iterator iterator=cMap.keySet().iterator();
while (iterator.hasNext()) {
System.out.println(cMap.get(iterator.next()));
cMap.put("4", "S5");
}
输出是
Windows Phone
HTC
S5
iPhone
上面两个代码sn-ps有什么区别。在第二个代码 sn-p 中,我添加了 cMap.put("4", "S5"); 并且正在添加。但在第一个 sn-p 中,我添加了未添加到 ConcurrentHashmap 的 cMap.put("Samsung", "S5");。我是否犯了任何错误或其他可能是导致这种不同输出的原因。
提前致谢。
【问题讨论】:
-
您尝试运行代码多少次?输出的差异总是存在吗?
-
很多次@SimoneGianni。但是我得到了同样的输出。
-
如果以下两个答案之一满足您的问题,请接受。
标签: java hashmap concurrenthashmap concurrentmodification