Sobes.tech
Junior — Middle

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 (synchronized bez static): 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 — Class objekta, 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.