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

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

Ответ

В Java есть несколько способов синхронизации:

  1. synchronized методы/блоки – самый простой способ. Блокирует доступ к объекту или методу для других потоков.
public synchronized void syncMethod() { ... }
// или
synchronized(obj) { ... }
  1. ReentrantLock – более гибкая альтернатива с возможностью прерывания, таймаутов и честной блокировки.
Lock lock = new ReentrantLock();
lock.lock();
try { ... } finally { lock.unlock(); }
  1. Atomic-классы (AtomicInteger и др.) – для атомарных операций без блокировок.
AtomicInteger counter = new AtomicInteger(0);
counter.incrementAndGet();
  1. Volatile – гарантирует видимость изменений между потоками, но не атомарность.
private volatile boolean flag;
  1. Semaphore, CountDownLatch, CyclicBarrier – высокоуровневые примитивы для управления потоками.

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