Synchronisieren eines Objekts, das von mehreren Threads gemeinsam genutzt wird, auf das jedoch nicht gleichzeitig zugegriffen wird
Angenommen, ich habe ein gemeinsames Objekt mit Felddata
. Mehrere Threads teilen sich einen Verweis auf dieses Objekt, um auf das Feld zuzugreifen. Die Threads greifen jedoch nie gleichzeitig auf das Objekt zu. Muss ich deklarierendata
als flüchtig?
Eine solche Situation wäre die folgende:
Eine KlasseCounter
definiert ein eindeutiges Feldvalue
und eine Methodeincrement
.Ein Thread inkrementiert den Zähler und erzeugt dann einen weiteren Thread, der den Zähler inkrementiert, usw.Aufgrund der Logik des Programms gibt es keinen gleichzeitigen Zugriff auf den Zähler. Der Zähler wird jedoch über mehrere Threads hinweg gemeinsam genutzt. Muss der Counter volatil sein?
Eine andere Variante der Situation ist, wenn mehrere Threads ein Objekt X manipulieren, das reine Daten sind, aber ihre zeitliche Ausführung über ein anderes Objekt Y abwechseln (so dass niemals gleichzeitig auf X zugegriffen wird), das sich auf die Steuerung des gemeinsamen Zugriffs stützt (wait
, notify
, synchronize
). Sollen Felder von Objekt X flüchtig sein?