Welcher Object-Lock-Pool bei static Variablen?

osion

Bekanntes Mitglied
Hallo

Wenn man einen Monitor auf eine nicht-statische Methode setzt, dann befindet sich der Object-Lock-Pool beim Objekt, d.h. bei 'this' und bei einer statischen Methode beim '.class'. Wenn man ein 'synchronized(name)' ausführt, dann befindet sich der Object-Lock-Pool bei 'name'.

Wie ist das jedoch, wenn man 'static' hat, wie es bei 'uniqueID' der Fall ist?
Unbenannt.jpg
 

Anhänge

  • Unbenannt.jpg
    Unbenannt.jpg
    486,3 KB · Aufrufe: 1
Wenn man ein 'synchronized(name)' ausführt, dann befindet sich der Object-Lock-Pool bei 'name'.
Letztlich ist es auch bei statischen Variablen dieser Fall. Bei einem static Block ist der Lock immer auf dem Objekt, welches von dem Ausdruck (bei dir) 'name' zurückgeliefert wird.
Es geht also nicht darum, dass 'name' ein Name ist, sondern immer nur ein Ausdruck. Das kann nur eine Variablenreferenz sein oder eben auch ein Methodenaufruf.

Der Lock befindet sich also in deinem Fall immer auf jenem Objekt, welches zu dem Aufrufzeitpunkt in der statischen Variablen gespeichert ist.

Darüber hinaus ist es sehr dubios, dass im Konstruktor von Person der Wert einer statischen Variablen auf der Klasse gesetzt wird.
 
Zuletzt bearbeitet:
Letztlich ist es auch bei statischen Variablen dieser Fall. Bei einem static Block ist der Lock immer auf dem Objekt, welches von dem Ausdruck (bei dir) 'name' zurückgeliefert wird.
Es geht also nicht darum, dass 'name' ein Name ist, sondern immer nur ein Ausdruck. Das kann nur eine Variablenreferenz sein oder eben auch ein Methodenaufruf.

Der Lock befindet sich also in deinem Fall immer auf jenem Objekt, welches zu dem Aufrufzeitpunkt in der statischen Variablen gespeichert ist.

Darüber hinaus ist es sehr dubios, dass im Konstruktor von Person der Wert einer statischen Variablen auf der Klasse gesetzt wird.
Es handelt sich um vergangene Prüfungsfragen. Es ist natürlich so, dass die Konstrukte nicht unbedingt so umgesetzt werden.

Also ist der Lock der gleiche unabhängig davon ob eine Variabel static ist oder nicht?

Als Begründung: Auch wenn ich static bin, habe ich eine unabhängiges Object (in diesem Fall String-Objekt).
 
Der Lock ist immer jenes Objekt, welches zum Zeitpunkt des Ausführens des synchronized-Blocks durch den Ausdruck in synchronized(<ausdruck>) zurückgeliefert wird. Fertig.
Das ist in diesem Fall also immer das Objekt, welches durch die letzte Instanziierung eines Person Objektes in der statischen Variablen uniqueID gesetzt wurde.
 

Zurück
Oben