# 2 Methoden greifen auf gleiche Variable zu



## Timo90 (4. Sep 2012)

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 (4. Sep 2012)

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...


----------



## Timo90 (4. Sep 2012)

Danke für die schnelle Hilfe!!!


----------



## hüteüberhüte (16. Sep 2012)

Wenn du eine Methode der Form:

```
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.


----------

