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 anotify()vagynotifyAll()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
}