Ответ
При одновременном доступе нескольких потоков к одному объекту без синхронизации могут возникнуть проблемы:
- Race condition - результат зависит от порядка выполнения потоков
- Несогласованность данных - частичное обновление состояния объекта
Пример проблемы:
var counter = 0
fun increment() {
counter++ // Не атомарная операция!
}
// В нескольких потоках:
repeat(1000) {
thread { increment() }
}
// Результат может быть меньше 1000
Решение - использовать синхронизацию:
val lock = Any()
fun safeIncrement() {
synchronized(lock) {
counter++
}
}
Альтернативы: AtomicInteger, Mutex, @Volatile (для примитивов), потокобезопасные коллекции.