Що таке 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();
}
}
Коментарі