我正在用java創建一個多線程聊天。當用戶u1向用戶u2發送消息但用戶u2未連接時,用戶u1將該消息發送給服務器,並且用戶u2在他連接到服務器後將接收該消息。未發送的消息將被添加到ArrayList。一旦用戶連接,他會檢查他是否是未決消息的收件人。如果他是,則將消息發送給他,然後從待處理消息列表中刪除。這就是我要做的事:數組併發修改
for(Iterator<String> itpendingmsgs = pendingmsgs.iterator(); itpendingmsgs.hasNext();) {
String pendingmsg = itpendingmsgs.next();
String dest = pendingmsg.substring(4);
if (protocol.author.equals(dest)) {
sendMsg(msg);
pendingmsgs.remove(pendingmsg);
}
}
這就是我得到:
Exception in thread "Thread-3" java.util.ConcurrentModificationException
at java.util.AbstractList$Itr.checkForComodification(Unknown Source)
at java.util.AbstractList$Itr.next(Unknown Source)
at ChatServer$ClientConnection.run(ChatServer.java:383)
at java.lang.Thread.run(Unknown Source)
如何解決呢?是因爲我在使用迭代器嗎?
不能使用刪除,而迭代 – keyser