Sobes.tech
Junior — Middle

Дар кадом унсурҳо метавон ба таври бехатар усули wait()-ро дар муҳити ҳамоҳангшуда даъват кард?

sobes.tech AI

Ҷавоб аз AI

Раванди wait() дар Java танҳо дар объектҳое даъват карда мешавад, ки монитор (чавоби монитор) онҳоро ҳоло ҷараён (тред) гирифтааст, яъне дар дохили блоки синхронизатсияшуда ё методи синхронизатсияшуда дар он объект. Ин маъно дорад, ки бехатар аст, ки wait()-ро танҳо дар объектҳое даъват кунед, ки мониторро дар онҳо нигоҳ медоред, масалан:

synchronized (obj) {
    obj.wait(); // бехатар
}

Агар wait()-ро берун аз контексти синхронизатсияшуда дар он объект даъват кунед, хатогии IllegalMonitorStateException баромад мекунад. Аз ин рӯ, шумо метавонед wait()-ро танҳо дар объектҳое даъват кунед, ки ҷараён (тред) ҳоло мониторро дар онҳо нигоҳ медорад (яъне дар дохили synchronized(obj) ё методи синхронизатсияшудаи он объект).