Зачем нужен synchronized? Что бы ты использовал для реализации потокобезопасного счётчика вместо synchronized?

В Java, помимо ключевого слова synchronized, существуют альтернативные способы синхронизации потоков:

Короткий ответ

Что ответить на собеседовании

В Java, помимо ключевого слова synchronized, существуют альтернативные способы синхронизации потоков:

Подробный разбор

Ответ с пояснениями

В Java, помимо ключевого слова synchronized, существуют альтернативные способы синхронизации потоков:

  • Класс ReentrantLock из пакета java.util.concurrent.locks — более гибкий механизм блокировки с возможностью попытки захвата блокировки и таймаутом.
  • Использование volatile для обеспечения видимости изменений переменных между потоками (не обеспечивает атомарность).
  • Классы из пакета java.util.concurrent, например, Semaphore, CountDownLatch, CyclicBarrier — для более сложной координации потоков.
  • Методы wait(), notify(), notifyAll() для взаимодействия потоков через монитор объекта.

Пример с ReentrantLock:

import java.util.concurrent.locks.ReentrantLock;

ReentrantLock lock = new ReentrantLock();

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

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее