Sobes.tech
Junior — Middle

Mi történik a folyamattal, ha egy synchronized jelölt módszeren belül meghívjuk a wait() metódust a jelenlegi objektumon?

sobes.tech MI

Válasz az MI-től

Ha egy synchronized kulcsszóval jelölt metóduson belül a jelenlegi objektumon a wait() metódust hívod, akkor a szál:

  • Fel fogja szabadítani az objektum monitorját (zárát), lehetővé téve más szálak számára, hogy belépjenek a szinkronizált blokkba vagy metódusba.
  • Át fog lépni a várakozási állapotba (wait), amíg egy másik szál nem hívja meg a notify() vagy notifyAll() metódust ugyanazon az objektumon.

Így a wait() ideiglenesen megállítja a jelenlegi szál végrehajtását és felszabadítja a monitort, ami segít elkerülni a kölcsönös blokkolásokat és lehetővé teszi a szálak közötti együttműködést.

Példa:

synchronized(this) {
    while (!feltétel) {
        wait(); // felszabadítja a monitort és várakozik a értesítésre
    }
    // a felébresztés után végrehajtandó kód
}