Sobes.tech
Junior — Middle

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 (synchronized nélkül static): 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 — a Class objektumon, 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.