Что произойдет если изменять объект из разных потоков

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

Ответ

Изменение объекта из разных потоков без синхронизации может привести к race condition, когда результат зависит от порядка выполнения потоков. Это вызывает неожиданное поведение, например:

  • Потеря данных – если два потока изменяют одну переменную.
  • Некорректное состояние объекта – частичное обновление полей из-за отсутствия атомарности.

Пример:

var counter = 0  
repeat(100) {  
    thread { counter++ }  
}  
Thread.sleep(1000)  
println(counter) // Может быть меньше 100  

Решение:

  • Использовать synchronized, Atomic* классы (AtomicInteger), Mutex, @Volatile (для примитивов).
  • Для коллекций – ConcurrentHashMap, CopyOnWriteArrayList.
  • Корутины – Mutex или потокобезопасные структуры.