我有一個ClientSocket和Client對象的HashMap。HashMap迭代/刪除獲取java.util.ConcurrentModificationException
我是迭代使用循環扔,但有時新行添加到HashMap中,然後我得到的java.util.ConcurrentModificationException錯誤。 我相當明白爲什麼會發生,但我不明白如何解決它。我試圖在迭代開始之前製作我的HashMap的新副本,但仍然 - 我仍然有錯誤。
我的代碼:
private volatile HashMap<ClientSocket, Client> clientsMap = new HashMap<ClientSocket, Client>();
private volatile HashMap<ClientSocket, Client> iteratorClientsMap = new HashMap<ClientSocket, Client>();
private volatile ClientsMapIterator iterator;
iterator = new ClientsMapIterator(clientsMap);
iteratorClientsMap = iterator.getItreator();
for (Map.Entry<ClientSocket, Client> entry : iteratorClientsMap.entrySet()) {
ClientSocket key = entry.getKey();
//Client value = entry.getValue();
long diff = currentTime - key.getLastOnline();
boolean isAvailable = false;
try {
isAvailable = (key.getSocket().getInputStream().available() > 0);
} catch (IOException e) {
e.printStackTrace();
}
if (diff > keepAlive)
removeClientSocket(key);
}
public synchronized void addClientSocket(ClientSocket clientSocket) {
clientsMap.put(clientSocket, null);
}
addClientSocket是因爲它我得到錯誤的函數。
當我將它更改爲ConcurrentHashMap時,顯示'removeClientSocket'的代碼 – assylias