Найти тему
DEBAGanov

Java 1011. Какова функциональность методов notify и notifyAll?

Методы notify() и notifyAll() используются в Java для управления потоками. Оба метода используются, чтобы пробудить ожидающие потоки. Разница между ними заключается в том, что метод notify() пробуждает только один из ожидающих потоков, тогда как метод notifyAll() пробуждает все ожидающие потоки.

Пример использования метода wait() и notify() для синхронизации потоков в Java:

class Message {
private String message;
private boolean empty = true;

public synchronized String read() {
while(empty) {
try {
wait();
} catch (InterruptedException e) {}
}
empty = true;
notifyAll();
return message;
}

public synchronized void write(String message) {
while(!empty) {
try {
wait();
} catch (InterruptedException e) {}
}
empty = false;
this.message = message;
}
}

В этом примере класс Message имеет два метода, read() и write(). Метод read() ожидает, пока не будет доступно значение сообщения, а метод write() устанавливает значение сообщения. Методы wait() и notifyAll() используются для синхронизации потоков, чтобы потоки не пытались читать сообщения, которых еще нет, или записывать сообщения, когда другой поток еще не закончил чтение текущего сообщения.

1606 вопрос-ответ по Java: https://github.com/DEBAGanov/interview_questions

Tелеграмм канал: https://t.me/DEBAGanov

Мое резюме: https://github.com/DEBAGanov