Какие знаешь способы синхронизации потоков

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

Ответ

В Android для синхронизации потоков используются:

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

Выбор зависит от контекста: блокировки для сложных сценариев, атомарные операции для счетчиков, корутины для асинхронного кода.