Какую проблему решает кастомный Dispatcher с одним потоком

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

Ответ

Кастомный Dispatcher с одним потоком (например, Dispatchers.SingleThread) решает проблему конкурентного доступа к общему ресурсу, когда нужно гарантировать последовательное выполнение операций без блокировок. Это особенно полезно для работы с базами данных, файловой системой или любым другим состоянием, которое не должно изменяться параллельно.

Пример:

val singleThreadDispatcher = Executors.newSingleThreadExecutor().asCoroutineDispatcher()

// Использование
lifecycleScope.launch(singleThreadDispatcher) {
    // Безопасная работа с общим ресурсом
    sharedResource.modify()
}

Преимущества:

  • Избегает race conditions
  • Упрощает синхронизацию
  • Гарантирует порядок операций

Недостаток - потенциальное снижение производительности при CPU-bound задачах.