Ответ
Изменение объекта из разных потоков без синхронизации может привести к race condition, когда результат зависит от порядка выполнения потоков. Это вызывает неожиданное поведение, например:
- Потеря данных – если два потока изменяют одну переменную.
- Некорректное состояние объекта – частичное обновление полей из-за отсутствия атомарности.
Пример:
var counter = 0
repeat(100) {
thread { counter++ }
}
Thread.sleep(1000)
println(counter) // Может быть меньше 100
Решение:
- Использовать
synchronized,Atomic*классы (AtomicInteger),Mutex,@Volatile(для примитивов). - Для коллекций –
ConcurrentHashMap,CopyOnWriteArrayList. - Корутины –
Mutexили потокобезопасные структуры.