Sobes.tech
Junior — Middle

Кайсы элементтерде синхрондоштурулган контекстте wait() ыкмасын коопсуз чакырса болот?

sobes.tech AI

AIден жооп

Javaда wait() ыкмасын гана ошол объекттерде чакырыш мүмкүн, алардын монитор (монитор коду) учурдагы жип тарабынан алынып алынган болсо, башкача айтканда, ошол объектте синхрондоштурулган блок же метод ичинде. Бул мааниде, wait()-ти гана мониторду кармап турган объекттерде чакырыу коопсуз, мисалы:

synchronized (obj) {
    obj.wait(); // коопсуз
}

Эгер wait()-ти бул объектте синхрондоштурулбаган контекстте чакырсаңыз, IllegalMonitorStateException чыгат. Ошондуктан, wait()-ти гана ошол объекттерде чакырыш керек, анда учурдагы жип мониторду кармап турат (демек, synchronized(obj) ичинде же ошол объекттин синхрондоштурулган методу).