Sobes.tech
Junior — Middle

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 (synchronized zonder static): 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 — het Class-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.