Логотип YeaHub

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

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

Тренажёр

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

Обучение

Навыки

Задачи

Войти

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

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

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Kotlin: coroutines, dispatcher, thread-safety

Какие риски есть у Dispatchers.Unconfined? Приведите пример падения.

Вопрос раскрывает опасности использования Dispatchers.Unconfined в корутинах.

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

Unconfined запускает корутину в текущем потоке и может продолжить в любом другом после suspend. Это приводит к неожиданным race condition и утечкам.

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

Проблемы Unconfined:

  1. Непредсказуемый поток:

    launch(Dispatchers.Unconfined) {
        println("Start in ${Thread.currentThread().name}") // Main
        delay(1000)
        println("After delay in ${Thread.currentThread().name}") // Может быть другой поток!
    }
  2. Утечки ресурсов:
    Если корутина не завершится, она может "застрять" в фоновом потоке.

Пример падения:

fun main() {
    runBlocking {
        launch(Dispatchers.Unconfined) {
            println("Initial thread: ${Thread.currentThread().name}") // main
            delay(500)
            println("New thread: ${Thread.currentThread().name}") // DefaultDispatcher
            // Опасность: доступ к UI из не-main потока!
            button.text = "Updated" // Crash: CalledFromWrongThreadException
        }
    }
}

Вывод:
Используйте Unconfined только для тестов или крайних случаев, где поток не важен.

  • Аватар

    Android Guru

    Anton Gulyaev

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

Уровень

  • Рейтинг:

    2

  • Сложность:

    5

Навыки

  • Kotlin

    Kotlin

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

#coroutines

#dispatcher

#thread-safety

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

  • Аватар

    Android Guru

    Anton Gulyaev

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