[英]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.