Sobes.tech
Junior — Middle

Kuidas erinevad Java-s sünkroniseeritud näidismetodid ja staatilised sünkroniseeritud meetodid?

sobes.tech AI

Vastus AI-lt

Java-s on kaks tüüpi sünkroneeritud meetodit: sünkroneeritud näidismetodid ja staatilised sünkroneeritud meetodid. Peamine erinevus seisneb selles, millisel objektil toimub lukustamine:

  • Näidismetod, mis on sünkroneeritud (synchronized ilma static-ita): Lukustamine toimub objekti (this) peal, millele meetod kuulub. See tähendab, et kui teil on mitu klassi eksemplari, igaühel on oma lukustus.

  • Staatiline sünkroneeritud meetod (static synchronized): Lukustamine toimub klassi objekti peal — Class objekti, mis esindab ise klassi. Seega on lukustus ühine kõigi klassi eksemplaride jaoks.

Näide:

public class Example {
    public synchronized void instanceMethod() {
        // lukustab this
    }

    public static synchronized void staticMethod() {
        // lukustab Example.class
    }
}

See tähendab, et kaks niiti ei saa samaaegselt täita sama sünkroneeritud näidismetodit ühes objektis, kuid nad saavad täita erinevaid sünkroneeritud meetodeid erinevatel objektidel sellest klassist.

Samal ajal lukustab staatiline sünkroneeritud meetod kogu klassi, nii et ühel ajahetkel saab seda klassi üksainus niit täita, sõltumata eksemplaridest.