Sobes.tech
Junior — Middle

Որ տարրերում կարելի է անվտանգ կերպով կանչել wait() մեթոդը սինխրոնիզացված կոնտեքստում։

sobes.tech AI

Պատասխան AI-ից

Java- ում wait() մեթոդը կարող է կանչվել միայն այն օբյեկտների վրա, որոնց մոնիտորը (մոնիտորի բանալի) ներկայիս հոսքը (թրեդը) գրավել է, այսինքն՝ այդ օբյեկտի վրա սինխրոնիզացված բլոկի կամ սինխրոնիզացված մեթոդի ներսում։ Սա նշանակում է, որ անվտանգ է wait()-ը կանչել միայն այն օբյեկտների վրա, որոնց վրա դուք պահում եք մոնիտորը, օրինակ՝

synchronized (obj) {
    obj.wait(); // անվտանգ
}

Եթե wait()-ը կանչեք այդ օբյեկտի վրա սինխրոնիզացված կոնտեքստից դուրս, կբացվի IllegalMonitorStateException։ Հետևաբար, դուք կարող եք կանչել wait() միայն այն օբյեկտների վրա, որոնց վրա ներկայիս հոսքը պահում է մոնիտորը (այսինքն՝ synchronized(obj) կամ այդ օբյեկտի սինխրոնիզացված մեթոդի ներսում):