2 Methoden greifen auf gleiche Variable zu

Timo90

Mitglied
Hallo,

mein Problem ist wie folgt:

Methode left() arbeitet rekursiv auf dem linken Baum und right() rekursiv auf dem rechten, beide haben als Rückgabe wieder einen Baum. Für Umformungsarbeiten greifen beide auf die gleiche ArrayList AL zu.

Ist es nun möglich, wenn in left() AL.remove(xy) stattfindet, dass AL für right() nun auch ohne xy vorliegt?
Alternativ reicht es mir (vielleicht ist es auch besser), wenn zuerst left() ausgeführt wird und ANSCHLIEßEND right().


Wie lautet die unkomplitierste Lösung? Danke


Viele Grüße Timo
 

Marco13

Top Contributor
Werden die beiden Seiten wirklich von verschiedenen Threads abgearbeitet?

Standardmäßig ist es so, dass die Änderung von "left" direkt für "write" sichtbar ist, ABER man muss aufpassen, dass dort nicht gleichzeitig auf die Liste zugegriffen wird, ODER man muss synchronisieren. Ein einfachsten Fall mit
private List<X> list = Collections.synchronizedList(new ArrayList<X>());
sofern nicht einer drüberiteriert...
 
H

hüteüberhüte

Gast
Wenn du eine Methode der Form:
Java:
left(tree);
// remove operation here
right(tree);
hast, dann
- wird der Baum a) sequenziell durchschritten
- und b) haben Remove-Operationen sowohl Auswirkungen auf weitere right()- wie auch auf weitere left()-Aufrufe.

Um dem zu entgehen, könntest du Änderungsoperationen speichern und hinterher ausführen.

Wenn nicht gleichzeitig durch mehrere Threads auf die Daten zugegriffen wird, dann ist eine Synchronisierung nicht notwendig.
 

Neue Themen


Oben