Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

Документы

Медиа

Назад
Вопрос про Java: happens, before, rules

Какие операции формируют отношение happens-before?

Вопрос проверяет знание формальных правил Java Memory Model, которые задают гарантии видимости и порядка между потоками.

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

Отношение happens-before формируется набором строго определённых правил.
К ним относятся синхронизация через synchronized, volatile, запуск и завершение потоков.
Также учитываются операции с final полями и транзитивность.
Эти правила определяют, какие изменения памяти гарантированно видны.
Без них многопоточный код не имеет формальной корректности.

Длинный ответ

Java Memory Model задаёт набор операций, которые формируют отношение happens-before.

Основные правила happens-before

Перед перечислением важно отметить, что правила являются формальными гарантиями, а не рекомендациями.

1. Правило порядка в одном потоке

Операции в одном потоке:

  1. Выполняются в программном порядке.

  2. Предыдущая операция happens-before последующей.

2. synchronized

Для одного и того же монитора:

  1. Выход из synchronized-блока happens-before

  2. Входа в synchronized-блок другим потоком.

synchronized (lock) {
    shared = 1;
}
// happens-before
synchronized (lock) {
    System.out.println(shared);
}

3. volatile

Для одного поля:

  1. Запись в volatile happens-before

  2. Любого последующего чтения этого же поля.

4. Запуск потока

Вызов:

thread.start();

happens-before:

  • всем действиям внутри нового потока.

5. Завершение потока

Завершение потока happens-before:

  • успешному возврату из join().

6. final поля

Запись final поля в конструкторе happens-before:

  • чтению этого поля после корректной публикации объекта.

Транзитивность

Если:

  1. A happens-before B

  2. B happens-before C

То:

  • A happens-before C

Краткий вывод

Отношение happens-before формируется через synchronized, volatile, жизненный цикл потоков, final поля и транзитивность, задавая формальную основу многопоточности.

Уровень

  • Рейтинг:

    5

  • Сложность:

    8

Навыки

  • Java

    Java

Ключевые слова

#happens

#before

#rules

Подпишись на Java Developer в телеграм