Mi a különbség a szinkronizált példánymódszerek és a statikus szinkronizált módszerek között Java-ban?
sobes.tech MI
Válasz az MI-től
Java-ban két típusú szinkronizált módszer létezik: példány szinkronizált módszerek és statikus szinkronizált módszerek. A fő különbség az, hogy melyik objektumon történik a zárolás:
-
Példány szinkronizált módszer (
synchronizednélkülstatic): A zárolás az objektumon (this) történik, amelyhez a módszer tartozik. Ez azt jelenti, hogy ha több példányod van az osztályból, mindegyik saját zárolással rendelkezik. -
Statikus szinkronizált módszer (
static synchronized): A zárolás az osztály objektumán történik — aClassobjektumon, amely az osztályt képviseli. Így a zárolás minden példányra közös.
Példa:
public class Example {
public synchronized void instanceMethod() {
// ez blokkolja this
}
public static synchronized void staticMethod() {
// ez blokkolja az Example.class-t
}
}
Ez azt jelenti, hogy két szál nem futtathatja egyszerre ugyanazt a példány szinkronizált módszert ugyanazon az objektumon, de különböző objektumok különböző módszereit futtathatják.
Ugyanakkor a statikus szinkronizált módszer az egész osztályt blokkolja, így egy időben csak egy szál futtathat bármilyen statikus szinkronizált módszert az osztályból, függetlenül a példányoktól.