Čí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 (
synchronizedbezstatic): 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 — objektuClass, 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.