[英]Concurrent modification exception
我的以下代码引发并发修改异常,但我无法解决。 救命!
{
long now = new Date().getTime();
Set<String> keyset = requests.keySet();
Iterator<String> iterator = keyset.iterator();
while (iterator.hasNext()) {
String packetId = iterator.next();
RequestHolder entry = requests.get(packetId);
if (entry.isExpired(now)) {
entry.getListener().onTimeout(packetId);
iterator.remove();
}
}
}
替换为
long now = new Date().getTime();
Iterator<Map.Entry<String, RequestHolder>> iterator = requests.entrySet().iterator();
while (iterator.hasNext()) {
Map.Entry<String, RequestHolder> entry = iterator.next();
String packetId = entry.getKey();
RequestHolder requestHolder = entry.getValue();
if (requestHolder.isExpired(now)) {
requestHolder.getListener().onTimeout(packetId);
iterator.remove();
}
}
解决方案是遍历整个集合而不是遍历密钥集,使用密钥集迭代器再次访问集合中的条目,并从密钥集中删除条目
用这个替换您的while循环...
for (Entry<String, RequestHolder> entryElem : requests.keySet()) {
String packetId = entryElem.getValue();
RequestHolder entry = requests.getValue.get(packetId);
if (entry.isExpired(now)) {
entry.getListener().onTimeout(packetId);
iterator.remove();
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.