Какие знаешь инструменты для работы с многопоточностью в Kotlin

«Какие знаешь инструменты для работы с многопоточностью в Kotlin» — вопрос из категории Многопоточность, который задают на 24% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В Kotlin для многопоточности используются:

  1. Coroutines – легковесные потоки с suspend-функциями.
    GlobalScope.launch(Dispatchers.IO) { 
        val result = async { fetchData() }.await()
        withContext(Dispatchers.Main) { updateUI(result) }
    }
  1. Dispatchers (Main, IO, Default) – управляют потоком выполнения корутин.

  2. Flow – асинхронный поток данных, поддерживает отмену и контекст.

    flow { emit(data) }.flowOn(Dispatchers.IO).collect { ... }
  1. Mutex – блокировка для синхронизации доступа к общим ресурсам.
    val mutex = Mutex()
    mutex.withLock { sharedResource++ }
  1. Channel – коммуникация между корутинами (аналог BlockingQueue).

Для Java-совместимости:

  • ExecutorService, Handler, AsyncTask (устарел), RxJava.

Корутины предпочтительнее из-за простоты и отсутствия накладных расходов.