Какие знаешь способы синхронизации обращения к переменной

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

Ответ

В Android/Kotlin есть несколько способов синхронизации доступа к переменным:

  1. Synchronized блоки – использует монитор объекта для синхронизации:
synchronized(lockObject) {
    // critical section
}
  1. Volatile переменные – гарантирует видимость изменений между потоками, но не атомарность:
@Volatile
var counter = 0
  1. Atomic классы (AtomicInteger, AtomicReference и др.) – обеспечивают атомарные операции:
val atomicCounter = AtomicInteger(0)
atomicCounter.incrementAndGet()
  1. Mutex (из kotlinx.coroutines) – более современная альтернатива synchronized:
val mutex = Mutex()
mutex.withLock {
    // critical section
}
  1. Потокобезопасные коллекции (ConcurrentHashMap, CopyOnWriteArrayList и др.)

Выбор зависит от сценария: для простых случаев хватит volatile или atomic, для сложных – synchronized/mutex.