Ответ
Гонка потоков (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