nul
07-10-2006, 12:40
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:
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();
}
}
}
}
Die Fehlermeldung:
Exception in thread "Thread-0" java.util.ConcurrentModificationException
at java.util.LinkedList$ListItr.checkForComodificatio n(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.doM essageTasks(AbstractReader.java:56)
at moe.patrol.core.connection.smard.SmardReader.run(S mardReader.java:76)
at java.lang.Thread.run(Thread.java:595)
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 kann :(
Hat jemand vielleicht nen Vorschlag?
mfg
nul
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:
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();
}
}
}
}
Die Fehlermeldung:
Exception in thread "Thread-0" java.util.ConcurrentModificationException
at java.util.LinkedList$ListItr.checkForComodificatio n(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.doM essageTasks(AbstractReader.java:56)
at moe.patrol.core.connection.smard.SmardReader.run(S mardReader.java:76)
at java.lang.Thread.run(Thread.java:595)
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 kann :(
Hat jemand vielleicht nen Vorschlag?
mfg
nul