Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Android: threading, synchronization, wait

Как работает связка wait(), notify(), notifyAll()?

Этот вопрос проверяет понимание механизма межпоточного взаимодействия через методы wait(), notify(), и notifyAll().

Короткий ответ

  • wait() — освобождает монитор объекта и переводит поток в режим ожидания.

  • notify() — пробуждает один случайный поток, ожидающий на этом мониторе.

  • notifyAll() — пробуждает все потоки, ожидающие на мониторе.

Длинный ответ

1. Основные принципы:

  • Все три метода вызываются только внутри synchronized-блока, иначе IllegalMonitorStateException.

  • Работают только с общим объектом-монитором.

2. Пример использования:

private val lock = Object()  

fun producer() {  
    synchronized(lock) {  
        while (data.isEmpty()) {  
            lock.wait() // Ожидание данных  
        }  
        println("Данные получены: ${data.poll()}")  
    }  
}  

fun consumer() {  
    synchronized(lock) {  
        data.add("New Data")  
        lock.notify() // Пробуждение одного потока  
        // lock.notifyAll() — для пробуждения всех  
    }  
}  

3. Разница между notify() и notifyAll():

  • notify() — эффективнее, но может привести к голоданию потока.

  • notifyAll() — гарантирует пробуждение всех, но требует проверки условия после wait().

Вывод:
Используйте эту связку для координации потоков, но в современных приложениях предпочтительны ReentrantLock и Condition.

  • Аватар

    Android Guru

    Anton Gulyaev

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    2

  • Сложность:

    7

Навыки

  • Android

    Android

Ключевые слова

#threading

#synchronization

#wait

Подпишись на Android Developer в телеграм

  • Аватар

    Android Guru

    Anton Gulyaev

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.