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