Sobes.tech
Junior — Middle

Hogyan működik a synchronized mechanizmus, amikor statikus funkcióval használják egy monitor kontextusában?

sobes.tech MI

Válasz az MI-től

Amikor egy metódus synchronized static-ként van deklarálva Java-ban, a monitor (zár) a osztály szintjén kerül megszerzésre, nem az objektum példány szintjén. Ez azt jelenti, hogy ilyen metódus hívásakor a szál blokkolja az osztály (Class objektum) monitorát, és más szálak nem tudnak egyszerre más, ugyanazon osztályhoz tartozó statikus szinkronizált metódusokat végrehajtani.

Példa:

public class Example {
    public static synchronized void staticSyncMethod() {
        // blokkolja az Example.class osztály monitorát
        // kritikus szekció
    }
}

Ezért a synchronized egy statikus metóduson biztosítja az osztály szintű kölcsönös kizárást, nem pedig egy adott objektumét. Ez akkor hasznos, amikor a osztály statikus erőforrásaihoz vagy változóihoz való hozzáférést kell szinkronizálni.