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ță (
synchronizedfă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 — obiectulClasscare 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.