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

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

Ответ

Race condition – это состояние, когда несколько потоков одновременно пытаются изменить общие данные, и результат зависит от порядка выполнения операций. В случае инкремента переменной без синхронизации часть изменений может потеряться.

Пример:

var counter = 0

fun main() {
    repeat(100) {
        thread {
            repeat(1000) { counter++ }
        }
    }
    Thread.sleep(2000)
    println(counter) // Может быть меньше 100000
}

Решение – использовать синхронизацию (synchronized, AtomicInteger, Mutex):

val atomicCounter = AtomicInteger(0)

fun safeIncrement() {
    atomicCounter.incrementAndGet()
}