Ответ
В Android есть несколько потокобезопасных областей памяти:
- ThreadLocal - хранит данные, уникальные для каждого потока
val threadLocal = ThreadLocal<String>().apply {
set("Main thread value")
}
- Atomic-классы (AtomicInteger, AtomicBoolean и др.) - обеспечивают атомарные операции
val atomicCounter = AtomicInteger(0)
atomicCounter.incrementAndGet()
- @Volatile - гарантирует видимость изменений между потоками
@Volatile var isRunning = true
-
Synchronized коллекции - Collections.synchronizedList() и аналоги
-
Корутины с Mutex - для синхронизации в корутинах
val mutex = Mutex()
mutex.withLock {
// critical section
}
-
LiveData - автоматически обновляет UI в главном потоке
-
Flow с flowOn() - позволяет указать контекст выполнения