benurb
Mitglied
Ich habe mir folgenden Gedankengang überlegt. Nehmen wir an ich habe zum Beispiel folgende Klasse:
Nun ist die Methode methodCallNTS() ja nicht Thread-Safe da theoretisch zwischen dem null-Check und dem Methodenaufruf von test() theoretisch ein anderer Thread ein setObj(null) ausführen könnte. Die Methode methodCallTS() müsste aber meiner Logik nach Thread-Safe sein, weil ja die Referenz unverändert bleibt und der null-Check und der Methodenaufruf von test() definitiv auf dasselbe Objekt ausgeführt werden. Oder ist mein Gedankengang hier schon falsch?
Falls nicht, wäre es dann in solchen einfachen Szenarien eine bessere Alternative zu Synchronized oder Read/Write-Locks? Falls nicht, welche Vorteile ergeben sich durch die Nutzung von Synchronized oder Locks?
Danke im Voraus
Java:
public class Test
{
private Object _obj;
public void methodCallNTS()
{
if(_obj != null)
{
_obj.test();
}
}
public void methodCallTS()
{
Object obj = _obj;
if(obj != null)
{
obj.test();
}
}
public void setObj(Object obj)
{
_obj = obj;
}
}
Nun ist die Methode methodCallNTS() ja nicht Thread-Safe da theoretisch zwischen dem null-Check und dem Methodenaufruf von test() theoretisch ein anderer Thread ein setObj(null) ausführen könnte. Die Methode methodCallTS() müsste aber meiner Logik nach Thread-Safe sein, weil ja die Referenz unverändert bleibt und der null-Check und der Methodenaufruf von test() definitiv auf dasselbe Objekt ausgeführt werden. Oder ist mein Gedankengang hier schon falsch?
Falls nicht, wäre es dann in solchen einfachen Szenarien eine bessere Alternative zu Synchronized oder Read/Write-Locks? Falls nicht, welche Vorteile ergeben sich durch die Nutzung von Synchronized oder Locks?
Danke im Voraus

Zuletzt bearbeitet: