Что опасного если есть доступ к переменной с нескольких потоков

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

Ответ

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

  1. Потеря данных при одновременной записи.
  2. Некорректные значения при чтении во время записи.
  3. Deadlock, если синхронизация реализована неправильно.

Пример:

var counter = 0 // Shared variable

fun increment() {
    Thread { counter++ }.start()
    Thread { counter++ }.start()
}
// Результат может быть 1 вместо 2!

Решение: Используйте synchronized, Atomic, Mutex или потокобезопасные коллекции.