Synchronized Zugriff ArrayList<E>

Status
Nicht offen für weitere Antworten.

xote

Mitglied
Hallo alle miteinander,

Wieder einmal stehe ich vor einem recht doofen Problem, wahrscheinlich ist es sowieso einfach zu lösen, aber ich stehe irgendwie auf dem Schlauch. Es geht darum den Zugriff von 2 Methoden auf eine ArrayList zu synchronisieren(?), was mir irgendwie nicht gelingen will...

Kurze Erklärung: Ich habe eine Klasse die eine ArrayList beinhaltet. 2 Methoden greifen darauf zu, die werden von 2 verschiedenen Threads aus aufgerufen. Die eine Methode (im Beispiel methode1) soll bestimmte Einträge der ArrayList entfernen, die andere Methode (methode2) soll ein Object der ArrayList hinzufügen und gegebenfalls ein anderes Object aus der ArrayList entfernen (falls es mit dem hinzugefügten Object obsolet wird).

Code:
import java.util.ArrayList;
import java.util.Iterator;

public class MyObject {

   private ArrayList<MyOtherObject> liste;

   public MyObject() {
      liste = new ArrayList<MyOtherObject>();
   }

   synchronized public methode1() {
      Iterator<MyOtherObject> iter = liste.iterator();
      while(iter.hasNext()) {
         MyOtherObject test = iter.next();
         if(test.checkSometing()) {
            liste.remove(test);
         }
      }
   }

   synchronized public methode2(MyOtherObject obj) {
      Iterator<MyOtherObject> iter = liste.iterator();
      while(iter.hasNext()) {
         MyOtherObject test = iter.next();
         if(test.getSomething().equals(obj.getSomeThing())) {
            liste.remove(test);
         }
      }
      liste.add(obj);
   }

}

Und jetzt schmeisst mir der eine Exception:

Exception in thread "Thread-2" java.util.ConcurrentModificationException
at java.util.AbstractList$Itr.checkForComodification(Unknown Source)
at java.util.AbstractList$Itr.next(Unknown Source)
at XXX.YYY.MyObject.updateHostList(MyObject.java:16)
at XXX.YYY.Thread1.run(Thread1.java:76)
at java.lang.Thread.run(Unknown Source)

Ich war der Meinung, wenn ich die Methoden "synchronized" deklariere, dann wird immer nur entweder die eine oder die andere Methode ausgeführt. Offenbar hat er da ein Problem mit dem Iterator. Hat vielleicht wer einen Tipp für mich, verlange gar keine fertige Lösung, nur irgendwie eine Richtung...
 

Landei

Top Contributor
Schau mal, ob in der concurrent package was hübsches für dich dabei ist (ArrayBlockingQueue?)

Oder probiere mal, auf die liste selbst zu synchronisieren:

Code:
public methode1() { 
   synchronized(liste) {
      for(MyOtherObject test : liste) { 
         if(test.checkSometing()) { 
            liste.remove(test); 
         } 
      } 
   } 
}

public methode2(MyOtherObject obj) { 
   synchronized(liste) {
      for(MyOtherObject test :liste) { 
         if(test.getSomething().equals(obj.getSomeThing())) { 
            liste.remove(test); 
         } 
      } 
      liste.add(obj); 
   } 
}
 
G

Gast

Gast
Früher hiess es immer:
ArrayList ist nicht threadsicher. Wenn mans threadsicher machen will, sollte man Vector nehmen. Das waren aber noch jdk1.4-Zeiten.
 
S

SlaterB

Gast
während ein Iterator über eine Liste läuft darf man aus der Liste nichts entfernen,
jedenfalls nicht hinter dem Rücken des Iterators

statt
> liste.remove(test);
schreibe
iter.remove();
 

xote

Mitglied
Landei hat gesagt.:
Oder probiere mal, auf die liste selbst zu synchronisieren:[...]
Schon probiert, gleiches Ergebnis.

Auch das concurrent package bringt mich nicht weiter.

Da hakt irgendwo der Iterator. Mache ich da mit dem Zugriff auf die Liste selbst was falsch? Kann man sowas vielleicht gar nicht mit einem Iterator machen?

EDIT: SLATER B hat vielleicht die Lösung gefunden! Muss erst überprüfen, ob das so stimmt, melde mich wieder.
 
S

SlaterB

Gast
siehe meine Antwort,
hat nichts mit Synchronisierung zu tun
 

xote

Mitglied
So, jetzt habe ich mir das mal angeschaut. Tatsächlich ist es so, wie Slater B. es beschrieben hat, an einem Iterator sein Dings zu herumzulöschen bringt besagte ConcurrentModificationException.

Es funktioniert. Danke.

Hakerl machen...
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
Z Threads Threads - Zugriff auf Ressourcen ohne(Lock, Synchronized) Java Basics - Anfänger-Themen 2
M OOP Synchronized Methoden, zugriff aus Threads Java Basics - Anfänger-Themen 4
frager2345 Thread - Methoden synchronized deklarieren Java Basics - Anfänger-Themen 10
berserkerdq2 Wo finde ich in der Java Api die Notation zu Threads bezüglich Synchronized? Java Basics - Anfänger-Themen 14
A Thread - Synchronized Java Basics - Anfänger-Themen 10
berserkerdq2 Findet eine parallele Verarbeitung in Java bei Threads erst statt, wenn man die Methoden auch synchronized? Und wie sieht bei Conditions aus? Java Basics - Anfänger-Themen 8
X Threads Zwei Threads, aber doppelte Ausgabe verhindern (synchronized) Java Basics - Anfänger-Themen 54
O synchronized Java Basics - Anfänger-Themen 39
O synchronized difference Java Basics - Anfänger-Themen 5
E Synchronisierte Methoden vs. Synchronized(lockObject) Block Java Basics - Anfänger-Themen 7
T Was bringt das synchronized bei der Methode? Java Basics - Anfänger-Themen 12
temi Synchronized(Monitor) Java Basics - Anfänger-Themen 2
Shams Synchronized-Schlüsselwort bei Inkrementierung einer statischen Variable Java Basics - Anfänger-Themen 13
V Parameter in synchronized-Blöcken verstehen Java Basics - Anfänger-Themen 2
M Threads synchronized und wait Java Basics - Anfänger-Themen 2
N Threads Probleme mit synchronized Java Basics - Anfänger-Themen 9
B synchronized threads Java Basics - Anfänger-Themen 17
J Threads Synchronized Java Basics - Anfänger-Themen 6
U synchronized / lock Java Basics - Anfänger-Themen 8
P Arraylist synchronized? Java Basics - Anfänger-Themen 6
X3TitanCore Methoden synchronized bei einer Methode Java Basics - Anfänger-Themen 2
P synchronized methoden Java Basics - Anfänger-Themen 3
B warum schließt synchronized andere threads nicht aus? Java Basics - Anfänger-Themen 7
M Synchronized klappt nicht Java Basics - Anfänger-Themen 11
E synchronized Methoden Java Basics - Anfänger-Themen 3
M synchronized( ref ) Java Basics - Anfänger-Themen 3
I Synchronized Threads Java Basics - Anfänger-Themen 4
R Problem: Threads Synchronized machen Java Basics - Anfänger-Themen 5
X Threads und synchronized - Verständnisproblem Java Basics - Anfänger-Themen 3
M Kleines Problem mit Threads (synchronized) Java Basics - Anfänger-Themen 3
S Fragen zu synchronized + Singleton! Java Basics - Anfänger-Themen 10
S bin zu blöd für threads - wait, notify, synchronized Java Basics - Anfänger-Themen 11
J simple Frage zu synchronized Java Basics - Anfänger-Themen 4
S Threads: synchronized mach nicht was es soll? Java Basics - Anfänger-Themen 6
L Threads und synchronized Java Basics - Anfänger-Themen 8
R wait() in synchronized - Block oder nicht? Java Basics - Anfänger-Themen 4
G synchronized Java Basics - Anfänger-Themen 5
M synchronized variables? Java Basics - Anfänger-Themen 8
B Verständnissfrage synchronized Java Basics - Anfänger-Themen 2
S Warum wirkt hier synchronized nicht? Java Basics - Anfänger-Themen 9
C Trotz "synchronized" unerwartete Ausgabe Java Basics - Anfänger-Themen 2
E Synchronized - Methoden in verschied. Klassen Java Basics - Anfänger-Themen 3
C synchronized Java Basics - Anfänger-Themen 2
J Fragen zu Synchronized Java Basics - Anfänger-Themen 6
T synchronized HashMap Java Basics - Anfänger-Themen 7
L Problem mit synchronized und String Java Basics - Anfänger-Themen 2
A Problem mit Threads und synchronized Java Basics - Anfänger-Themen 3
B Was bedeutet synchronized? Java Basics - Anfänger-Themen 8
I In unterschiedlichen Applikation Zugriff auf eine gemeinsame Anwendung? Java Basics - Anfänger-Themen 8
C Zugriff auf Methode Java Basics - Anfänger-Themen 2
I Applikationsserver (WildFly) - Zugriff auf Ressourcen.. Problem mit Pfade Java Basics - Anfänger-Themen 10
J Zugriff auf eine 2. Klasse die per UI-Designer erstellt wurde Java Basics - Anfänger-Themen 1
Encera Zugriff auf Map-Objekte Java Basics - Anfänger-Themen 3
T Zugriff auf Control anderer Klasse Java Basics - Anfänger-Themen 5
W Unterschiede bei Zugriff auf Objekt und Klassenvariablen über einen Getter? Java Basics - Anfänger-Themen 2
EchtKeineAhnungManchmal hallo habe ein Problem mit einer Datei -> (Zugriff verweigert) Java Basics - Anfänger-Themen 4
R TreeSet Zugriff aus anderer Klasse Java Basics - Anfänger-Themen 8
C Kein Zugriff auf Klassenmethoden in Main Methode Java Basics - Anfänger-Themen 23
H Zugriff verweigert Java Basics - Anfänger-Themen 5
moiss002 Umgebungsvariable Kein Zugriff auf ein Array Java Basics - Anfänger-Themen 7
B Probleme mit Zugriff auf Dateisystem Windows 10 ( jFileChooser) Java Basics - Anfänger-Themen 17
B Zugriffsmodifier, Zugriff außerhalb Package Java Basics - Anfänger-Themen 5
C Zugriff auf Attribut von Oberklasse Java Basics - Anfänger-Themen 8
P Klasse hat keinen Zugriff auf getter/setter-Methoden eines Objektes Java Basics - Anfänger-Themen 9
B Methoden Methoden haben kein Zugriff auf variablen Java Basics - Anfänger-Themen 4
M Gettter/Setter Methoden Klassenfelder kapselung und zugriff? Java Basics - Anfänger-Themen 1
S Zugriff auf protected Fields = guter Programmierstil? Java Basics - Anfänger-Themen 11
M Pfadprobleme - Zugriff auf einen Ordner im Workspace Java Basics - Anfänger-Themen 17
ruutaiokwu Bluetooth-Zugriff, braucht es dazu plattformabhängige Libraries oder kann das Java mittlerweile selbst? Java Basics - Anfänger-Themen 10
R Zugriff auf den Index eines Arrays, welches ein Objekt ist. Java Basics - Anfänger-Themen 4
M Zugriff auf eine ArrayList in einer anderen Klasse Java Basics - Anfänger-Themen 4
P Zugriff auf Variablen anderer Klassen in Greenfoot Java Basics - Anfänger-Themen 1
L Methoden Zugriff <identifier> expected Java Basics - Anfänger-Themen 13
T Java - Zugriff nur mit CLASSPATH ? Java Basics - Anfänger-Themen 7
B Klassen Zugriff auf ein Objekt einer Klasse aus einer Methode heraus Java Basics - Anfänger-Themen 4
L Zugriff auf Attribute eins Objekts über ActionListener Java Basics - Anfänger-Themen 4
D Zugriff auf Methode einer anderen Klasse Java Basics - Anfänger-Themen 5
S Zugriff auf Objekt Java Basics - Anfänger-Themen 5
A Klassen Zugriff auf Instanzen Java Basics - Anfänger-Themen 2
N ArrayList in eigener Klasse erzeugen mit Zugriff Java Basics - Anfänger-Themen 7
J Zugriff auf Variable in anderem Programm Java Basics - Anfänger-Themen 5
Q Zugriff auf Attribute Java Basics - Anfänger-Themen 3
J Klassen Zugriff auf ein "String Array" Java Basics - Anfänger-Themen 6
H Datentypen ArrayList in ArrayList: Zugriff Java Basics - Anfänger-Themen 6
J get methoden zugriff und objekt erzeugung Java Basics - Anfänger-Themen 30
J Datenbank Zugriff Java Basics - Anfänger-Themen 24
T Zugriff auf JCheckBox Java Basics - Anfänger-Themen 8
E Netzlaufwerk Zugriff schlägt fehl Java Basics - Anfänger-Themen 11
C Group, Actor und Instanz-Zugriff, LibGDX Java Basics - Anfänger-Themen 4
S Zugriff auf Attribut einer unbekannten Klasse erhalten Java Basics - Anfänger-Themen 6
R Methoden Methode der GUI-Klasse Zugriff auf Methoden der Hauptklasse Java Basics - Anfänger-Themen 9
S Vererbung Zugriff auf die Basisklasse einer "zweiten" Erweiterungsklasse Java Basics - Anfänger-Themen 2
S Vererbung Zugriff auf Methode funktioniert nicht (static/non-static) Java Basics - Anfänger-Themen 3
F Klassen Zugriff auf verschachtelte Objekte Java Basics - Anfänger-Themen 11
J Sichtbarkeit und Zugriff Java Basics - Anfänger-Themen 9
G Wieviel kostet der Zugriff auf Objektattribute im Vergleich zur Erstellung von vars in Methode? Java Basics - Anfänger-Themen 11
L Zugriff auf zwei Java-Quellcodes Java Basics - Anfänger-Themen 3
A OOP Zugriff auf Objekte von außen Java Basics - Anfänger-Themen 8
M Kapselung Datenkapselung Sinn direkter Zugriff? Java Basics - Anfänger-Themen 1
G Methoden Zugriff auf Methode.. aus einer anderen Klasse Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben