Этот вопрос проверяет понимание базовых механизмов синхронизации и взаимодействия потоков, встроенных прямо в Object.
В Object есть несколько методов, напрямую связанных с многопоточностью: wait(), notify(), notifyAll() и clone() (косвенно).
Методы wait() и notify/notifyAll() используются для координации потоков через монитор объекта.
Каждый объект в Java может выступать в роли монитора.
Эти методы работают только в контексте синхронизации.
Без понимания этих методов невозможно корректно реализовать низкоуровневое взаимодействие потоков.
Перед тем как перечислять методы, важно понимать базовую идею: каждый объект в Java имеет монитор, который используется для синхронизации потоков.
Object, связанные с многопоточностьюwait(), wait(long), wait(long, int)Определение:wait() — это метод, который переводит текущий поток в состояние ожидания до тех пор, пока другой поток не уведомит монитор.
Основные особенности:
Поток освобождает монитор объекта.
Поток переходит в состояние WAITING или TIMED_WAITING.
Возврат из wait() возможен только после:
вызова notify() / notifyAll()
истечения тайм-аута
прерывания потока
Пример:
synchronized (lock) {
while (!condition) {
lock.wait();
}
// работа с condition
}
notify()notify() пробуждает один случайный поток, ожидающий монитор данного объекта.
Ключевые моменты:
Поток не продолжает выполнение сразу.
Он лишь переходит в состояние ожидания захвата монитора.
Выбор потока не гарантирован.
synchronized (lock) {
condition = true;
lock.notify();
}
notifyAll()notifyAll() пробуждает все потоки, ожидающие монитор объекта.
Используется, когда:
Несколько потоков ждут разных условий.
Нельзя точно определить, какой поток должен продолжить работу.
synchronized (lock) {
condition = true;
lock.notifyAll();
}
clone() не управляет потоками, но связан с моделью памяти и синхронизацией при копировании объектов, поэтому иногда упоминается в контексте многопоточности.
Методы wait(), notify() и notifyAll() — это фундамент низкоуровневой синхронизации в Java, построенный вокруг монитора объекта и используемый для координации потоков.