Вопрос с собеседования · Java

Какие пары действий образуют отношение happens-before?

MiddleJVM и сборка мусора
Коротко

Happens-before — гарантия, что результаты A видны в B. Пары: порядок внутри потока, unlock → последующий lock того же монитора, запись volatile → последующее чтение того же поля, Thread.start() → действия потока, действия потока → успешный join(). Отношение транзитивно.

  • Это не про время, а про видимость и порядок
  • Запись final-полей в конструкторе видна после его завершения (при корректной публикации)
  • Классы java.util.concurrent документируют свои гарантии: put в очередь → take

А ещё Нет цепочки happens-before — нет гарантии, даже если «по времени уже записано»

Подробно

Happens-before — не про время, а про гарантию: если A happens-before B, то результаты A видны в B. Базовые правила: порядок операций внутри одного потока; unlock перед последующим lock того же монитора; запись volatile перед последующим чтением; Thread.start() перед всем в потоке; всё в потоке перед возвратом из join(); замораживание final-полей в конце конструктора. Отношение транзитивно — именно это позволяет опубликовать целый граф объектов через одну volatile-ссылку. Обычные чтения без синхронизации никаких гарантий не дают.

Что хотят услышать

  • Определение через видимость.
  • Основные правила.
  • Транзитивность как основа безопасной публикации.

Частые ошибки

  • Понимать happens-before как «выполнилось раньше по времени».
  • Забывать про транзитивность — на ней держится безопасная публикация.

Проверьте себя

Несколько верных вариантов. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✓Освобождение монитора и его последующий захват другим потоком
  • ✓Запись в volatile-поле и последующее чтение этого поля
  • ✓Вызов Thread.start() и любое действие внутри запущенного потока
  • ✗Два чтения одного обычного (не volatile) поля из разных потоков

Что спросят дальше

  • Что гарантирует замораживание final-полей?
  • Почему без happens-before возможна вечная работа цикла с обычным флагом?

Разбор темы

Связанные вопросы

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

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

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

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