Встречается на собеседованиях • сегодня

Как управлять Happens-before

Happens-before — это отношение гарантирующее, что одна операция видит результат другой. В Java управлять им можно через:

  1. Синхронизацию - операции в synchronized блоке видят изменения из предыдущих synchronized блоков с тем же монитором:
java
synchronized(lock) {
    x = 1;  // Запись
}
synchronized(lock) {
    System.out.println(x);  // Гарантированно увидит 1
}
  1. volatile переменные - запись в volatile поле happens-before последующее чтение того же поля:
java
volatile boolean flag = false;

// Поток 1
flag = true;

// Поток 2
if (flag) { // Гарантированно увидит true, если запись уже произошла
    // действие
}
  1. Thread.start() и Thread.join() - вызов start() happens-before действия в потоке, а действия в потоке happens-before завершение join().

  2. Классы из java.util.concurrent - например, CountDownLatch, CyclicBarrier, Future.

Важно: happens-before не означает физический порядок выполнения, только гарантию видимости изменений.

Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы