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)
どうすれば修正できますか?イテレータを使用しているからですか?