Что такое гонка потоков

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

Ответ

Гонка потоков (race condition) возникает, когда несколько потоков одновременно обращаются к общим данным, и результат выполнения зависит от порядка их выполнения. Это может привести к непредсказуемому поведению и ошибкам.

Пример:

var counter = 0

fun increment() {
    Thread {
        repeat(1000) { counter++ }
    }.start()
}

// Запускаем 10 потоков
repeat(10) { increment() }
Thread.sleep(1000)
println(counter) // Результат может быть меньше 10000

Для предотвращения гонок используют:

  • Синхронизацию (synchronized)
  • Атомарные переменные (AtomicInteger)
  • Потокобезопасные коллекции
  • Корутины с Mutex или SharedFlow