Логотип YeaHub

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

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

Тренажёр

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

Обучение

Навыки

Задачи

Войти

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

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

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Kotlin: threading, mutual exclusion, deadlock

Можно ли получить доступ к критической секции из нескольких потоков при использовании synchronized?

Вопрос проверяет понимание гарантий, предоставляемых synchronized.

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

Нет, synchronized гарантирует, что только один поток может находиться в критической секции в любой момент времени. Остальные потоки блокируются до освобождения монитора.

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

1. Как работает блокировка:

  • При входе в synchronized-блок поток получает монопольный доступ к монитору объекта.

  • Другие потоки ожидают освобождения монитора в очереди.

2. Визуализация:

Поток 1: [входит в sync] -> [работает] -> [выходит из sync]
Поток 2: [ожидает] ------> [входит после освобождения]

3. Пример с несколькими потоками:

synchronized(lock) {
    // Только 1 поток выполняет этот код единовременно
    System.out.println(Thread.currentThread().getName() + " внутри блока");
}

4. Исключения:

  • Если потоки используют разные объекты для блокировки, они могут работать параллельно:

    // Поток 1:
    synchronized(lock1) { ... } 
    
    // Поток 2:
    synchronized(lock2) { ... } // Не блокируется!

5. Важные нюансы:

  • Статические методы синхронизируются по классу (MyClass.class).

  • Deadlock возможен, если потоки блокируют мониторы в разном порядке.

Вывод:
synchronized строго ограничивает доступ к критической секции, обеспечивая потокобезопасность, но требует аккуратного использования для избежания взаимоблокировок.

  • Аватар

    Android Guru

    Anton Gulyaev

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

Уровень

  • Рейтинг:

    2

  • Сложность:

    7

Навыки

  • Kotlin

    Kotlin

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

#threading

#mutual exclusion

#deadlock

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

  • Аватар

    Android Guru

    Anton Gulyaev

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