Можно ли синхронизировать корутины с помощью synchronized

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

Ответ

Нет, synchronized блоки работают только с потоками, но не с корутинами. Для синхронизации корутин используйте мьютексы или другие примитивы из kotlinx.coroutines.sync.

Пример с Mutex:

val mutex = Mutex()

suspend fun safeUpdate() {
    mutex.withLock {
        // критическая секция
    }
}

Корутины могут выполняться в одном потоке, поэтому synchronized не гарантирует безопасность. Mutex же приостанавливает корутину вместо блокировки потока, что более эффективно.