Какие знаешь потокобезопасные области памяти

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

Ответ

В Android есть несколько потокобезопасных областей памяти:

  1. ThreadLocal - хранит данные, уникальные для каждого потока
val threadLocal = ThreadLocal<String>().apply { 
    set("Main thread value") 
}
  1. Atomic-классы (AtomicInteger, AtomicBoolean и др.) - обеспечивают атомарные операции
val atomicCounter = AtomicInteger(0)
atomicCounter.incrementAndGet()
  1. @Volatile - гарантирует видимость изменений между потоками
@Volatile var isRunning = true
  1. Synchronized коллекции - Collections.synchronizedList() и аналоги

  2. Корутины с Mutex - для синхронизации в корутинах

val mutex = Mutex()
mutex.withLock { 
    // critical section 
}
  1. LiveData - автоматически обновляет UI в главном потоке

  2. Flow с flowOn() - позволяет указать контекст выполнения