Sobes.tech
Junior — Middle

Care este diferența dintre metodele sincronizate de instanță și metodele sincronizate statice în Java?

sobes.tech AI

Răspuns de la AI

În Java, există două tipuri de metode sincronizate: metode sincronizate de instanță și metode sincronizate statice. Diferența principală constă în obiectul pe care are loc blocarea:

  • Metoda sincronizată de instanță (synchronized fără static): Blocarea are loc pe obiectul (this) căruia îi aparține metoda. Asta înseamnă că, dacă ai mai multe instanțe ale clasei, fiecare are propria sa blocare.

  • Metoda sincronizată statică (static synchronized): Blocarea are loc pe obiectul clasei — obiectul Class care reprezintă clasa însăși. Astfel, blocarea este comună pentru toate instanțele clasei.

Exemplu:

public class Example {
    public synchronized void instanceMethod() {
        // blochează this
    }

    public static synchronized void staticMethod() {
        // blochează Example.class
    }
}

Aceasta înseamnă că doi fire de execuție nu pot executa simultan aceeași metodă sincronizată de instanță a aceluiași obiect, dar pot executa metode sincronizate diferite ale unor obiecte diferite ale acestei clase.

În același timp, metoda sincronizată statică blochează întreaga clasă, astfel încât, într-un moment dat, doar un singur fir de execuție poate executa orice metodă sincronizată statică a acestei clase, indiferent de instanțe.