Ist dieser Code sicher gegen concurrent modifications?

  • Themenstarter Themenstarter TimTT
  • Beginndatum Beginndatum
T

TimTT

Gast
Hallo,

der Titel sagt schon alles. Ich frage mich ob dieser Codeabschnitt sicher gegen concurrent modification ist? Also ist das Lock immernoch auf der Liste, wenn ein Thread die Liste mit der get-Methode geholt hat?


public List<XYZ> xyzList = null;

public List<XYZ> getXYZList()
{
synchronized(xyzList){
return xyzList;
}
}
 
Muss ich dann jede Stelle, die getXYZList() aufruft synchronizieren? Oder gibts da irgend ne bessere methode?
 
Selbst synchronisierte Listen bzw. Vector schützen nicht vor ConcurrentModificationExceptions, die Iteratoren zB. können die werfen die auch wenn nur ein einziger Thread alles macht.
 
Sie schützen auch nicht bei mehreren Threads. Wenn sichergestellt werden muss, dass ein Thread über einen bestimmten Zeitraum der alleinige Bearbeiter eines Objekts (ob nun Liste oder nicht), muss immer explizit synchronisiert werden.
 

Zurück
Oben