私はClientSocketとClient ObjectのHashMapを持っています。java.util.ConcurrentModificationExceptionを取得するHashMap反復/削除
私はそれをforループを使用してスローしていますが、新しい行がハッシュマップに追加され、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