Kā atšķiras Java sinhronizētās metodes piemēram un statiskās sinhronizētās metodes?
sobes.tech AI
Atbilde no AI
Java ir divu veidu sinhronizētas metodes: sinhronizētas instances metodes un statiskas sinhronizētas metodes. Galvenā atšķirība ir tajā, uz kāda objekta notiek bloķēšana:
-
Sinhronizēta instances metode (
synchronizedbezstatic): Bloķēšana notiek uz objekta (this), kam pieder metode. Tas nozīmē, ka, ja jums ir vairākas klases instances, katrai ir sava bloķēšana. -
Statiska sinhronizēta metode (
static synchronized): Bloķēšana notiek uz klases objekta —Classobjekta, kas pārstāv pašu klasi. Tādējādi bloķēšana ir kopīga visām klases instancēm.
Piemērs:
public class Example {
public synchronized void instanceMethod() {
// bloķē this
}
public static synchronized void staticMethod() {
// bloķē Example.class
}
}
Tas nozīmē, ka divi pavedieni nevar vienlaikus izpildīt to pašu sinhronizēto instances metodi vienā objektā, bet var izpildīt dažādas sinhronizētas metodes dažādiem objektiem šajā klasē.
Tāpat, statiskā sinhronizētā metode bloķē visu klasi, tāpēc vienlaikus tikai viens pavediens var izpildīt jebkuru šīs klases statisko sinhronizēto metodi, neatkarīgi no instancēm.