Sobes.tech
Junior — Middle

Čí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 (synchronized bez static): 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 — objekte Class, 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.