Логотип YeaHub

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

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

Тренажёр

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

Обучение

Навыки

Задачи

Войти

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

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

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Kotlin: multithreading, deadlock, synchronization

Когда synchronized недостаточно для предотвращения гонки потоков?

Вопрос раскрывает ограничения synchronized и случаи, когда он неэффективен.

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

synchronized не подходит, если:

  • Нужна неблокирующая синхронизация (например, Atomic).

  • Требуется ожидание условий (используйте wait()/notify() или ReentrantLock).

  • Есть риск deadlock из-за вложенных блокировок.

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

1. Неблокирующие операции

Atomic-классы эффективнее для простых операций (инкремент, сравнение).

Пример:

// Плохо: synchronized для инкремента
synchronized(lock) { counter++ }

// Лучше: AtomicInteger
atomicCounter.incrementAndGet()

2. Ожидание условий

synchronized требует ручного управления wait()/notify(), что сложно.

Пример:

// Сложно и рискованно
synchronized(lock) {
    while (!condition) lock.wait()
}

Решение:
Используйте ReentrantLock с Condition:

val lock = ReentrantLock()
val condition = lock.newCondition()

lock.lock()
try {
    while (!condition) condition.await()
} finally {
    lock.unlock()
}

3. Deadlock

Вложенные synchronized блоки могут привести к взаимной блокировке.

Пример:

// Поток 1
synchronized(lockA) {
    synchronized(lockB) { ... }
}

// Поток 2
synchronized(lockB) {
    synchronized(lockA) { ... } // Deadlock!
}

Вывод:
Для сложных сценариев используйте ReentrantLock, Atomic или корутины.

  • Аватар

    Android Guru

    Anton Gulyaev

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

Уровень

  • Рейтинг:

    2

  • Сложность:

    4

Навыки

  • Kotlin

    Kotlin

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

#multithreading

#deadlock

#synchronization

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

  • Аватар

    Android Guru

    Anton Gulyaev

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