Threads Zwei Threads greifen auf LinkedList zu.

cable545

Aktives Mitglied
Hallo,
ich habe folgendes Problem. Ich habe zwei Threads welche auf eine statische LinkedList zugreifen.
Thread-A packt neue Objekte in die LinkedList und der Thread-B durchläuft die LinkedList in einer
for - each Schleife. Wenn ich mit Thread-B die Schleife durchlaufe kommt es logischer Weise immer mal dazu, dass Thread-B während des Durchlaufs von laufend auf lauffähig gesetzt wird und Thread-A dann ein weiteres Objekt in die LinkedList packt. Und somit hab ich, wenn Thread-B wieder dran ist einen Fehler. Gibt es die Möglichkeit, den Schleifendurchlauf in jedem Fall zu Ende führen zu lassen, dass dann erst der Thread-B von laufend auf lauffähig gesetzt wird?
 

faetzminator

Gesperrter Benutzer
Du musst die Zugriffe synchronisieren. Ich bin leider kein Profi was das anbelangt, ich hätte da einfach mal bei beiden Codestücken ein [c]synchronized (deineListe) { ... }[/c] rumgemacht und geschaut, was passiert ;)
 

cable545

Aktives Mitglied
ich habe das Lesen sowie das Schreiben aus/in die LinkedList also
Code:
public synchronized static LinkedList<ChatTab> getChatTab() {
   return chatTab;
}
und
Code:
public synchronized static void setChatTab(LinkedList<ChatTab> chatTab) {
   ClientGui.chatTab = chatTab;
}
mit "synchronized" gesichert. Das Problem ist aber, dass unter Umständen im Rumpf der for - each Schleife die LinkedList verändert wird. Und wenn der Schleifenkopf danach abgearbeitet wird, gibts den Fehler. Bin da irgendwie überfragt
 
S

SlaterB

Gast
die gesamte Schleife muss in einem synchronized-Block stehen, solange keine Änderung möglich,
unter Annahme dass sie in ms vorbei geht und nicht irgendwie durchgehend läuft

eine grundsätzliche Alternative ist, auf Kopien von Listen zu arbeiten
 
B

bygones

Gast
oh --- da steht schonmal zuviel static da ... wozu brauchst du das ?

bevor du eigene synch mechanismen versuchst, kannst du auch probieren eine Collection aus dem java.util.concurrent paket zu nehmen
 

cable545

Aktives Mitglied
wenn ich die Schleife in ein snchronized Block packe ändert das ja nichts an der Situation, dass mein anderer Thread die LinkedList manipuliert.
 
S

SlaterB

Gast
also ein (korrektes) synchronized sollte schon was ändern, LinkedList-Manipulation verhindern, das ist der Lehrbuch-Sinn von synchronized ;)
 

cable545

Aktives Mitglied
Ok, also mein Problem ist doch, dass diese Liste von einem Thread auf irgendeine Art und Weise verändert wird(also von der Menge der Objekte darin) und im gleichen Augenblich diese Liste in einer for -each Schleife durchforstet wird. die Exception die ich dann bekomme lautet "ConcurrentModificationException". is ja auch einleuchtend. Aber ich versteh nicht was ich da mit synchronized tun soll. ich hab jetzt mal "CopyOnWriteArrayList" benutzt. da funzt das alles wie es soll.
die Schleife läuft da erstmal die alte Anzahl der Iterationen zuende und und beim nächsten komplett neuen Start der Schleife wird die neue Anzahl der Elemente, in der Liste,als Anzahl der Iterationen genommen.
verstanden????:L
 
S

SlaterB

Gast
ein synchronized um die Schleife herum würde für diese Zeit Updates verhindern, genauso effektiv, genauso leicht zu verstehen,
aber wenn du mit CopyOnWriteArrayList zum Ziel kommst ist ja alles bestens,
ich setze das Thema vorerst auf Erledigt
 
Zuletzt bearbeitet von einem Moderator:

Cola_Colin

Top Contributor
Siehe hier:
Collections (Java Platform SE 7 )

Workflow:
1.) Die Liste wrappen
2.) Stellen die mit Iteratoren arbeiten (for each tut das auch !) anpassen, wie es in der Doku verlangt wird.
3.) Profit !

CopyOnWriteArrayList hat eben den Nachteil, dass es extrem langsam sein kann.
Wenn du damit kein Problem hast, dann passt das aber auch.
 
Zuletzt bearbeitet von einem Moderator:
V

vanny

Gast
hmm also manipulierst du die Anzahl der Elemente in deiner Liste, und Iterierst gleichzeitig drüber?

Dann würde ich es besser finden, wenn du dir vor jedem Schleifendurchlauf eine Kopie deiner Liste anlegst und über diese iterierst, solange das deine Logik nicht stören würde.
Syncronisieren müsstest du dann nur noch die Methode, die die Listenkopie erstellt.

Ob´s auch nur annähernd schlau ist weiß ich nicht, ist nur mal ein Blitzgedanke, den ich dir nicht vorenthalten wollte

Gruß Vanny
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
H Zwei unabhängige Threads miteinander kommunizieren lassen Allgemeine Java-Themen 3
P Threadprogrammierung - zwei Threads parallel - einer beendet Allgemeine Java-Themen 3
M zwei Threads - ein singleton-Objekt Allgemeine Java-Themen 3
O Text aus einer Textdatei rausholen, der zwischen zwei Schlüsselworten steht Allgemeine Java-Themen 4
D Zwei Listen vergleichen Allgemeine Java-Themen 7
Tobero Wie berechnet man ob zwei Linien sich schneiden? Allgemeine Java-Themen 2
kodela Zwei gleichzeitig gedrückte Steuertasten Allgemeine Java-Themen 10
X Bedingung zwei mal überprüfen Allgemeine Java-Themen 4
Zrebna Random Number - Generische Formel zwischen zwei INKLUSIVEN Werten Allgemeine Java-Themen 16
D Input/Output Zwischen zwei ID-Räumen unterscheiden und Objekt löschen Allgemeine Java-Themen 16
D OOP Gemeinsamen ID-Raum für zwei Klassen implementieren Allgemeine Java-Themen 7
S Wenn eine Klasse zwei Interfaces mit derselben Methodensignatur implementiert: welche wird aufgerufen? Allgemeine Java-Themen 15
S Kann man Variablen oder Felder definieren deren Typ zwei Interfaces ist..? Allgemeine Java-Themen 9
K Aus String zwei Jahreszahlen auslesen Allgemeine Java-Themen 18
M Wie kann man eine void Methode mit Variablen von zwei verschiedenen Objekten ausführen? Allgemeine Java-Themen 15
VfL_Freak Double mit zwei festen NK-Stellen ausgeben Allgemeine Java-Themen 9
Neoline Methoden Zwei Arrays abwechselnd zusammenführen Allgemeine Java-Themen 15
J Zwei Wavdateien gleichzeitig mit SourceDataLine abspielen Allgemeine Java-Themen 0
D Best Practice Die niedrigste Differenz zwischen zwei Listen ermitteln. Allgemeine Java-Themen 10
J Fahrroute zwischen zwei Punkten finden Allgemeine Java-Themen 1
J Kollision von zwei Kreisen Allgemeine Java-Themen 15
J Transfer von Integer zwischen zwei Clients - RMI Allgemeine Java-Themen 4
S Variablen split-Funkton mit zwei Variabeln verwenden? Allgemeine Java-Themen 4
T Alle Kombinationen aus zwei Arrays Allgemeine Java-Themen 8
G Liste zwischen zwei Kalenderdaten erstellen Allgemeine Java-Themen 3
AssELAss Zwei Arrays / ArrayLists inhaltlich vergleichen Allgemeine Java-Themen 2
H RegularExpression zwischen zwei Strings Allgemeine Java-Themen 2
P Zwei Applikationen mit einem Job Allgemeine Java-Themen 0
A Lineare Interpolation mit zwei Arrays Allgemeine Java-Themen 4
E Berechnung des Schnittpunktes von zwei Geraden Allgemeine Java-Themen 1
S Zwei String vergleichen, Fehler markieren Allgemeine Java-Themen 3
G Matrix reduzieren zwei Methoden Allgemeine Java-Themen 2
Dechasa Vergleichen von zwei Arrays Allgemeine Java-Themen 4
P Zwei ArrayLists: Ohne die eine überhaupt anzurühren, wird sie verändert Allgemeine Java-Themen 2
S Anwendung zum ausrechnen der Differenz von zwei Tagen Allgemeine Java-Themen 9
F Zwei LinkedHashMaps iterieren und vergleichen Allgemeine Java-Themen 2
M Zwei unterschiedliche JAR Dateien mit ANT erstellen Allgemeine Java-Themen 8
B Fehler beim Auslesen von Einstellungen. Zwei ähnliche Blöcke, nur eins geht. Allgemeine Java-Themen 5
L Zwei Files miteinander vergleichen und Grafisch darstellen Allgemeine Java-Themen 1
T Zwei Wortendungen vergleichen ohne .equals Allgemeine Java-Themen 10
F Webstart zwei Java Versionen / aktivieren bzw deaktivieren Allgemeine Java-Themen 2
S Zwei Comparable (compareTo) vergleichen Allgemeine Java-Themen 6
E zwei Gleitkommazahlen durcheinander dividieren Allgemeine Java-Themen 2
X Generic muss zwei Klassen/Interfaces erfüllen Allgemeine Java-Themen 5
turmaline OOP zwei gleiche Methoden mit kleinen Unterschieden Allgemeine Java-Themen 15
T Wie heißt ein Binärbaum, dessen Knoten immer zwei Kinder haben müssen? Allgemeine Java-Themen 2
C ActionListener zwei Buttons zuweisen Allgemeine Java-Themen 11
M Eclipse drei slashs durch zwei ersetzen? Allgemeine Java-Themen 3
1 zwei Strings vergleichen Allgemeine Java-Themen 16
C Buchstaben, die in zwei Wörtern vorkommen Allgemeine Java-Themen 13
J Gleiche Packagestruktur in zwei *.jar Dateien Allgemeine Java-Themen 4
G Zwei bytes vergleichen Allgemeine Java-Themen 2
B zwei-dimensionale Collections bzw. Array mit Indizes Allgemeine Java-Themen 3
C Zwei Arrays vereinen Allgemeine Java-Themen 3
K Objekt-Austausch zwischen zwei Programmen über System-Clipboard Allgemeine Java-Themen 5
H Zwei verschiedene Dateien mittels einem Binärstream übertragen? Allgemeine Java-Themen 13
N hashCode() für zwei ints Allgemeine Java-Themen 5
turmaline Gleichheit von zwei Maps Map <String, Map <String, String>> Allgemeine Java-Themen 30
N Wie Listenabgleich auf zwei CPU Cores auslagern? Allgemeine Java-Themen 6
D Zufall wahr bzw. falsch mit zwei Faktoren Allgemeine Java-Themen 10
H Datenaustausch zwischen zwei Java-Programmen Allgemeine Java-Themen 5
H Ausgabe von zwei Textfeldern Allgemeine Java-Themen 3
G zwei mal synchronized Allgemeine Java-Themen 5
Z zwei Daten vergleichen Allgemeine Java-Themen 4
C ArrayList anhand von zwei Attributen sortieren Allgemeine Java-Themen 4
S Alle Elemente von zwei Listen vergleichen Allgemeine Java-Themen 10
T IText: Zwei A4 PDF´s auf ein A3 PDF´s Allgemeine Java-Themen 2
J Verschachtelte ListIteratoren um in zwei Listen hin und herzugehen Allgemeine Java-Themen 5
A Differenz zwischen zwei Uhrzeiten Allgemeine Java-Themen 7
H Shortcut ruft zwei Menu-punkte auf Allgemeine Java-Themen 5
J Zwei konstruktoren? Allgemeine Java-Themen 8
A zwei listen vergleichen und unterschiede anzeigen Allgemeine Java-Themen 3
J Zwei sortierte Listen zusammenfassen Allgemeine Java-Themen 8
G Linked List zwischen zwei Threds übergeben Allgemeine Java-Themen 11
J zwei HashMaps vereinen Allgemeine Java-Themen 3
C Viele Informationen aus zwei Collections vergleichen Allgemeine Java-Themen 2
G Jfreechart zwei charts Allgemeine Java-Themen 2
S Zwei Anwendungen unter Tomcat Allgemeine Java-Themen 4
T Anzahl Tage zwischen zwei Daten - Stunde fehlt? Allgemeine Java-Themen 2
V Zwei ArrayList(s) vergleichen Allgemeine Java-Themen 6
T Überprüfen ob zwei Farben ähnlich sind Allgemeine Java-Themen 14
M zwei main-Methoden Allgemeine Java-Themen 7
P zwei JFrames zusammenhängen Allgemeine Java-Themen 4
A Summe und Produkt von zwei Feldern ( arrays) Allgemeine Java-Themen 9
M HashMap kapselt zwei Objekte aber wie baut man eine Matrix? Allgemeine Java-Themen 2
H zwei Date Variablen überschreiben sich Allgemeine Java-Themen 2
2 Tage zwischen zwei Datumsdaten zählen Allgemeine Java-Themen 2
G Tage zwischen zwei Datumsdaten zählen Allgemeine Java-Themen 3
J Zwei String auf ähnlichkeiten untersuchen? Allgemeine Java-Themen 3
C kürzester weg zwischen zwei Punkten, Koordinaten finden Allgemeine Java-Themen 15
B zwei Bilder miteinander vergleichen Allgemeine Java-Themen 25
L Anzahl Tage zwischen zwei Kalenderdaten Allgemeine Java-Themen 5
G Kommunikation von zwei Java-Programmen Allgemeine Java-Themen 3
A Zusammenfassen von zwei Dateien (wie beim DOS-Befehl copy) Allgemeine Java-Themen 6
S zwei Arrays zusammenfassen Allgemeine Java-Themen 14
L Zwei Hashtables statt einer? Allgemeine Java-Themen 6
A funktion schiffeZeichnen zwei mal aufrufen Allgemeine Java-Themen 16
G zwei Rückgabewerte gefordert. Was tun ? Allgemeine Java-Themen 10
Chucky Zwei Binärbäume vereinigen Allgemeine Java-Themen 7
B Fehler:Mein Applet kann nicht auf zwei txt-Dateien zugreifen Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben