Sobes.tech
Junior — Middle

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 (synchronized ohne static): 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 — dem Class-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.