Ответ
В Android для синхронизации потоков используются:
- synchronized – блокирует доступ к объекту/методу для других потоков.
synchronized(lockObject) { /* critical section */ }
- ReentrantLock – более гибкая альтернатива synchronized с возможностью tryLock(), fair lock.
val lock = ReentrantLock()
lock.lock()
try { /* critical section */ }
finally { lock.unlock() }
- Atomic-классы (AtomicInteger, AtomicBoolean) – потокобезопасные операции без блокировок.
val counter = AtomicInteger(0)
counter.incrementAndGet()
- Handler/Looper – передача задач в главный поток из фонового.
Handler(Looper.getMainLooper()).post { /* UI update */ }
- Coroutines с Mutex – для корутин.
val mutex = Mutex()
mutex.withLock { /* suspendable critical section */ }
Выбор зависит от контекста: блокировки для сложных сценариев, атомарные операции для счетчиков, корутины для асинхронного кода.