Čím sa líšia synchronizované metódy inštancie a synchronizované statické metódy v Jave?
sobes.tech AI
Odpoveď od AI
V Jave existujú dva typy synchronizovaných metód: synchronizované metódy inštancie a synchronizované statické metódy. Hlavný rozdiel spočíva v objekte, na ktorom sa vykonáva zámok:
-
Synchronizovaná metóda inštancie (
synchronizedbezstatic): Zámok sa vykonáva na objekte (this), ku ktorému patrí metóda. To znamená, že ak máte niekoľko inštancií triedy, každá má svoj vlastný zámok. -
Stabilná synchronizovaná metóda (
static synchronized): Zámok sa vykonáva na objekte triedy — objekteClass, ktorý reprezentuje samotnú triedu. Takže zámok je spoločný pre všetky inštancie triedy.
Príklad:
public class Example {
public synchronized void instanceMethod() {
// zamyká this
}
public static synchronized void staticMethod() {
// zamyká Example.class
}
}
To znamená, že dva vlákna nemôžu súčasne vykonať rovnakú synchronizovanú metódu inštancie jedného objektu, ale môžu vykonávať rôzne synchronizované metódy rôznych objektov tejto triedy.
Zároveň, statická synchronizovaná metóda blokuje celú triedu, takže v jednom momente môže vykonať iba jedno vlákno akúkoľvek statickú synchronizovanú metódu tejto triedy, bez ohľadu na inštancie.