In welchen Fällen muss der Zugriff auf Instanzmitglieder synchronisiert werden? Ich verstehe, dass der Zugriff auf statische Member einer Klasse immer synchronisiert werden muss, da sie für alle Objektinstanzen der Klasse gemeinsam genutzt werden.Welche Fälle erfordern den Zugriff auf synchronisierte Methoden in Java?
Meine Frage ist wann würde ich falsch sein, wenn ich Instanz Mitglieder nicht synchronisieren?
zum Beispiel, wenn meine Klasse
public class MyClass {
private int instanceVar = 0;
public setInstanceVar()
{
instanceVar++;
}
public getInstanceVar()
{
return instanceVar;
}
}
in ist, was Fälle (der Nutzung der Klasse MyClass
) würde ich müssen Methoden haben: public synchronized setInstanceVar()
und public synchronized getInstanceVar()
?
Vielen Dank im Voraus für Ihre Antworten.
Obwohl vorsichtig mit den Operatoren ++ und - sind sie nicht atomar. Um auf der sicheren Seite zu sein, versuchen Sie Klassen von java.util.concurrent.atomic. – InverseFalcon
Operationen für Ganzzahlen sind in Java nicht atomar. –
Sie können ein int aus verschiedenen Threads ändern, lokales Caching in den Threads erhalten, den ++ Vorgang lesen und nicht synchronisieren. Nur weil Longs und Doubles als zwei Op-Operationen gelesen und geschrieben werden (Load Upper und Load Lower, um alle 64 Bits zu erhalten), bedeutet das nicht, dass ganze Zahlen plötzlich atomar werden, weil sie unter 1 weniger Nicht-Thread-Sicherheitsproblemen leiden. – Tatarize