Что такое состояние гонки (Race condition)

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

Ответ

Состояние гонки — это ошибка, возникающая, когда несколько потоков одновременно обращаются к общим данным, и результат выполнения зависит от порядка их выполнения. Это может привести к неожиданному поведению или повреждению данных.

Пример:

var counter = 0

fun increment() {
    Thread {
        for (i in 1..1000) {
            counter++
        }
    }.start()
}

// Запускаем 10 потоков
repeat(10) { increment() }

Здесь 10 потоков увеличивают counter, но из-за отсутствия синхронизации итоговое значение может быть меньше 10000. Для исправления используйте synchronized, AtomicInteger или другие механизмы синхронизации.