So, meld mich wieder mal mit nem Fall der mir schwierigkeiten macht.
Ich habe ne Application die Nachrichten verarbeitet und eine Menge von Objekten die diese Nachricht verarbeiten. Nun bekomme ich aber eine ConcurrentException wenn ich versuche eines dieser verarbeitenden Objekte zu entfernen.
Der Code sieht so aus:
Die Fehlermeldung:Code:public synchronized void register( MessageLogger logger ) { synchronized ( this.loggers ) { if ( !this.loggers.contains( logger ) ) this.loggers.add( logger ); } } public synchronized void unregister( MessageLogger logger ) { synchronized ( this.loggers ) { this.loggers.remove( logger ); } } public synchronized void report( Message message ) { synchronized ( this.loggers ) { for ( MessageLogger logger : this.loggers ) { try { logger.redirectMessage( message ); } catch ( ConfigurationException e ) { System.err.println( logger.getClass() + ": Invalid logger value(s)." ); e.printStackTrace(); } } } }
Das Problem tritt also beim for auf. Nun ist mir das schon klar was da nicht zusammenpasst, aber mir faellt leider nicht ein wie man das nun loesen kannCode:Exception in thread "Thread-0" java.util.ConcurrentModificationException at java.util.LinkedList$ListItr.checkForComodification(LinkedList.java:617) at java.util.LinkedList$ListItr.next(LinkedList.java:552) at moe.patrol.core.Reporter.report(Reporter.java:96) at moe.patrol.core.connection.core.AbstractReader.doMessageTasks(AbstractReader.java:56) at moe.patrol.core.connection.smard.SmardReader.run(SmardReader.java:76) at java.lang.Thread.run(Thread.java:595)
Hat jemand vielleicht nen Vorschlag?
mfg
nul
Lesezeichen