Middle
Методи wait дар Java чӣ мекунад?
sobes.tech AI
Ҷавоб аз AI
Ҳозирги тўқимани кутув ҳолатига чақиради (объект блокировкаси бўшатилади), бошқа тўқиманинг notify() ёки notifyAll() усулини шу объект учун чақириши ёки тайм-аут бўлишигача. Бу синхронлаштирилган блоклар ёки методларда қўлланилади.
// wait() ва notify()дан фойдаланиш намунаси
public class SharedObject {
private boolean dataAvailable = false;
public synchronized void waitForData() throws InterruptedException {
while (!dataAvailable) {
// Тўқима маълумотлар мавжуд бўлгунча кутмоқда
wait();
}
// Маълумотларни қайта ишлаш
System.out.println("Маълумотлар қабул қилинди.");
}
public synchronized void sendData() {
// Маълумотларни юбориш
dataAvailable = true;
// Кутувчи тўқималарни уйғотамиз
notifyAll();
System.out.println("Маълумотлар юборилди.");
}
}
Асосий нуқталар:
- Фақат синхронлаштирилган контекстдан (блок ёки метод) чақирилади.
wait()чақирилган объект учун тўқима блокировкаси бўшатилади.- Қатъий бўлиши мумкин (
InterruptedException). - Тайм-аут билан юкланган версиялари мавжуд.
notify()бир кутувчи тўқимани уйғотади.notifyAll()барча кутувчи тўқимани уйғотади.