Wat is het verschil tussen gesynchroniseerde instantie-methoden en gesynchroniseerde statische methoden in Java?
sobes.tech AI
Antwoord van AI
In Java zijn er twee soorten gesynchroniseerde methoden: gesynchroniseerde instantie-methoden en gesynchroniseerde statische methoden. Het belangrijkste verschil ligt in op welk object de lock wordt toegepast:
-
Gesynchroniseerde instantie-methode (
synchronizedzonderstatic): De lock gebeurt op het object (this) waaraan de methode behoort. Dit betekent dat als je meerdere instanties van de klasse hebt, elk zijn eigen lock heeft. -
Gesynchroniseerde statische methode (
static synchronized): De lock gebeurt op het klasse-object — hetClass-object dat de klasse zelf vertegenwoordigt. Dus, de lock is gedeeld door alle instanties van de klasse.
Voorbeeld:
public class Example {
public synchronized void instanceMethod() {
// lockt this
}
public static synchronized void staticMethod() {
// lockt Example.class
}
}
Dit betekent dat twee threads niet tegelijkertijd dezelfde gesynchroniseerde instantie-methode van een object kunnen uitvoeren, maar ze kunnen verschillende gesynchroniseerde methoden van verschillende objecten van deze klasse uitvoeren.
Tegelijkertijd blokkeert de statische gesynchroniseerde methode de hele klasse, dus op elk moment kan slechts één thread een van de statische gesynchroniseerde methoden van deze klasse uitvoeren, ongeacht de instanties.