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 (
synchronizedilmastatic-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 —Classobjekti, 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.