Что такое notify в Java?
В Java методы notify() и notifyAll() применяются в контексте многопоточного программирования для управления выполнением потоков. Они используются для уведомления других потоков о том, что объект находится в состоянии, которое может заинтересовать эти потоки.
Основные моменты:
- Объект монитора:
notify()вызывается на объекте, который находится в режиме монитора. Это означает, что поток вызывающийnotify()должен владеть монитором данного объекта.
- Разбуженный поток:
- Вызов
notify()будит один из потоков, ожидающих на объекте монитора. Какой именно поток будет разбужен, не определено, и зависит от реализации JVM.
- Вызов
notifyAll():- В отличие от
notify(),notifyAll()будит все потоки, ожидающие на объекте монитора.
- В отличие от
class SharedResource {
private boolean resourceAvailable = false;
synchronized void acquireResource() {
while (!resourceAvailable) {
try {
// Поток ожидает, пока ресурс не станет доступным
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("Resource acquired by: " + Thread.currentThread().getName());
}
synchronized void releaseResource() {
// Освобождение ресурса
resourceAvailable = true;
System.out.println("Resource released by: " + Thread.currentThread().getName());
// Уведомление о том, что ресурс доступен
notify();
}
}
Комментарии