Что применить если блок кода используется несколькими потоками

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

Ответ

Используйте synchronized блок или ReentrantLock для синхронизации доступа к общему ресурсу.

Пример с synchronized:

private final Object lock = new Object();

public void updateSharedResource() {
    synchronized (lock) {
        // Критическая секция
    }
}

Пример с ReentrantLock:

private final ReentrantLock lock = new ReentrantLock();

public void updateSharedResource() {
    lock.lock();
    try {
        // Критическая секция
    } finally {
        lock.unlock();
    }
}

Альтернативы:

  • Atomic-классы (AtomicInteger, AtomicReference и др.) для простых операций.
  • ThreadLocal, если данные не должны быть общими.
  • ConcurrentHashMap и другие потокобезопасные коллекции.

Выбор зависит от контекста: synchronized проще, ReentrantLock гибче (таймауты, честность).