Этап 6 из 11 · ≈ 6 ч

Java Memory Model и атомарность

Основа с Middle

happens-before, volatile, атомарные классы и CAS.

Что важно знать

  • Без синхронизации поток может не увидеть запись другого потока.
  • happens-before: запуск потока, запись в volatile, освобождение монитора.
  • volatile даёт видимость, но не атомарность i++.
  • CAS — основа атомарных классов; LongAdder под высокой конкуренцией.

Критерии освоения

Middle ≈ 6 ч

  • Объясняет видимость и happens-before и когда нужен volatile
  • Использует AtomicInteger, LongAdder и CAS вместо блокировок там, где уместно

Практика. Показать проблему видимости без volatile и исправить тремя способами.

Senior ≈ 4 ч

  • Объясняет безопасную публикацию объектов и ошибку double-checked locking без volatile

Практика. Разобрать реализацию ленивого синглтона с double-checked locking и объяснить, что гарантирует volatile.

Проверка знаний

Войдите, чтобы пройти тест: сданный тест отмечает тему пройденной на карте и в ИПР.

Вопросы с собеседований

Смотреть все
Что делает класс AtomicInteger?Junior

AtomicInteger выполняет операции вроде инкремента атомарно без блокировок — на аппаратной инструкции CAS (сравнение с обменом).

Полный разбор
Что гарантирует ключевое слово volatile для переменной?Middle

volatile даёт видимость (запись сразу видна другим потокам) и запрет переупорядочивания вокруг обращения, но не атомарность: count++ на volatile-поле всё равно теряет обновления.

Полный разбор
Почему в double-checked locking поле instance обязано быть volatile?Senior

new Singleton() — три шага: выделить память, выполнить конструктор, присвоить ссылку. Без volatile присвоение может опередить конструктор, и второй поток на первой проверке (вне synchronized) получит недостроенный объект.

Полный разбор
Один поток в цикле читает обычное поле-флаг, другой его меняет, но цикл не завершается. Почему?Junior

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

Полный разбор
Чем volatile отличается от synchronized?Middle

volatile — видимость и порядок для одной переменной без блокировки. synchronized — видимость плюс взаимное исключение: блок целиком выполняется одним потоком, поэтому составные действия становятся атомарными.

Полный разбор
Что такое ABA-проблема в алгоритмах на CAS?Senior

CAS сравнивает только текущее значение, а не историю: A → B → A выглядит как «ничего не менялось». В lock-free структурах со ссылками это ломает данные (узел удалили и переиспользовали).

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

Разборы темы

← Вся карта «Java»

Партнёр платформы

Разбор собеседования с sotto

После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.

Разбор собеседования