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.