Was ist der Unterschied zwischen synchronisierten Instanzmethoden und statischen synchronisierten Methoden in Java?
sobes.tech KI
Antwort von AI
In Java gibt es zwei Arten von synchronisierten Methoden: Instanzsynchronisierte Methoden und statisch synchronisierte Methoden. Der Hauptunterschied liegt darin, auf welchem Objekt die Sperre erfolgt:
-
Instanzsynchronisierte Methode (
synchronizedohnestatic): Die Sperre erfolgt auf dem Objekt (this), dem die Methode gehört. Das bedeutet, dass wenn Sie mehrere Instanzen der Klasse haben, jede ihre eigene Sperre hat. -
Statisch synchronisierte Methode (
static synchronized): Die Sperre erfolgt auf dem Klassenobjekt — demClass-Objekt, das die Klasse selbst repräsentiert. Somit ist die Sperre für alle Instanzen der Klasse gemeinsam.
Beispiel:
public class Example {
public synchronized void instanceMethod() {
// sperrt this
}
public static synchronized void staticMethod() {
// sperrt Example.class
}
}
Das bedeutet, dass zwei Threads nicht gleichzeitig die gleiche instanzsynchronisierte Methode eines Objekts ausführen können, aber sie können unterschiedliche synchronisierte Methoden verschiedener Objekte dieser Klasse ausführen.
Gleichzeitig sperrt die statisch synchronisierte Methode die ganze Klasse, sodass zu einem Zeitpunkt nur ein Thread jede statisch synchronisierte Methode dieser Klasse ausführen kann, unabhängig von den Instanzen.