Sobes.tech
Junior — Middle

Čím se liší synchronizované metody instance a synchronizované statické metody v Java?

sobes.tech AI

Odpověď od AI

V jazyce Java existují dva typy synchronizovaných metod: synchronizované metody instance a synchronizované statické metody. Hlavní rozdíl spočívá v objektu, na kterém dochází k zámku:

  • Synchronizovaná metoda instance (synchronized bez static): Zámek se provádí na objektu (this), ke kterému metoda patří. To znamená, že pokud máte několik instancí třídy, každá má svůj vlastní zámek.

  • Synchronizovaná statická metoda (static synchronized): Zámek se provádí na objektu třídy — objektu Class, který reprezentuje samotnou třídu. Tím je zámek sdílený všemi instancemi třídy.

Příklad:

public class Example {
    public synchronized void instanceMethod() {
        // zamyká this
    }

    public static synchronized void staticMethod() {
        // zamyká Example.class
    }
}

To znamená, že dva vlákna nemohou současně vykonávat stejnou synchronizovanou metodu instance jednoho objektu, ale mohou vykonávat různé synchronizované metody různých objektů této třídy.

Současně statická synchronizovaná metoda zamyká celou třídu, takže v daném okamžiku může vykonávat pouze jedno vlákno jakoukoli statickou synchronizovanou metodu této třídy, bez ohledu na instance.