arraylist jednoczesna modyfikacja [zamknięte]

Tworzę czat wielowątkowy w Javie. Gdy użytkownik u1 wysyła wiadomość do użytkownika u2, ale użytkownik u2 nie jest podłączony, użytkownik u1 wysyła wiadomość do serwera, a użytkownik u2 otrzyma wiadomość po połączeniu się z serwerem. Wiadomości, które nie zostały wysłane, są dodawane do listy ArrayList. Gdy użytkownik się połączy, sprawdza, czy jest odbiorcą oczekującej wiadomości. Jeśli tak, wiadomość zostanie do niego wysłana, a następnie usunięta z listy oczekujących wiadomości. Tak to robię:

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);
    }
}

oto co otrzymuję:

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)

Jak to naprawić? Czy to dlatego, że używam iteratora?

questionAnswers(4)

yourAnswerToTheQuestion