Логотип YeaHub

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

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

Тренажёр

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

Обучение

Навыки

Войти

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

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

© 2026 YeaHub

Документы

Медиа

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

Что такое happens-before в Java Memory Model?

Вопрос проверяет понимание формальных гарантий видимости и порядка операций в многопоточной среде Java.

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

happens-before — это отношение порядка между операциями в Java Memory Model.
Если одна операция happens-before другой, то её результаты гарантированно видны.
Это не обязательно реальный порядок выполнения.
Отношение используется JVM для определения корректности многопоточных программ.
Без него невозможно формально рассуждать о потокобезопасности.

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

Для корректной многопоточной программы важно не только что выполняется, но и какие гарантии видимости существуют между потоками.

Определение happens-before

Определение:
Отношение happens-before означает, что все эффекты первой операции становятся видимыми для второй операции.

Если:

  • A happens-before B
    то:

  • все записи A видны в B

Что это не означает

Важно не путать:

  1. Это не реальное время выполнения.

  2. Это не означает, что A выполнится раньше B в CPU.

  3. Это логическая гарантия видимости и порядка.

Зачем это нужно

Отношение happens-before позволяет:

  1. Формально описывать корректность кода.

  2. Доказывать потокобезопасность.

  3. Понимать поведение volatile, synchronized, final.

Пример без happens-before

int x = 0;
boolean ready = false;

// поток 1
x = 42;
ready = true;

// поток 2
if (ready) {
    System.out.println(x); // может быть 0
}

Без happens-before JVM не обязана показывать x = 42.

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

happens-before — это фундаментальное понятие JMM, определяющее, какие изменения памяти гарантированно видны между потоками.

Уровень

  • Рейтинг:

    5

  • Сложность:

    8

Навыки

  • Java

    Java

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

#happens

#before

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