Qual è la differenza tra i metodi sincronizzati di istanza e i metodi sincronizzati statici in Java?
sobes.tech AI
Risposta dell'AI
In Java, ci sono due tipi di metodi sincronizzati: metodi sincronizzati di istanza e metodi sincronizzati statici. La differenza principale riguarda l'oggetto su cui avviene il blocco:
-
Metodo sincronizzato di istanza (
synchronizedsenzastatic): Il blocco avviene sull'oggetto (this) a cui appartiene il metodo. Questo significa che se hai più istanze della classe, ognuna ha il proprio blocco. -
Metodo sincronizzato statico (
static synchronized): Il blocco avviene sull'oggetto della classe — l'oggettoClassche rappresenta la classe stessa. Quindi, il blocco è condiviso da tutte le istanze della classe.
Esempio:
public class Example {
public synchronized void instanceMethod() {
// blocca this
}
public static synchronized void staticMethod() {
// blocca Example.class
}
}
Questo significa che due thread non possono eseguire contemporaneamente lo stesso metodo sincronizzato di istanza di un oggetto, ma possono eseguire metodi sincronizzati diversi di oggetti diversi di questa classe.
Allo stesso tempo, il metodo sincronizzato statico blocca l'intera classe, quindi in un momento solo un thread può eseguire qualsiasi metodo sincronizzato statico di questa classe, indipendentemente dalle istanze.