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

Как обеспечить выполнение принципа happens-before

Принцип happens-before в Java гарантирует, что изменения в одном потоке будут видны другому потоку при определенных условиях. Основные способы:

  1. Синхронизация - доступ к общим данным через synchronized блоки или методы:
java
synchronized(lock) {
    // операции с общими данными
}
  1. Volatile переменные - чтение volatile поля гарантирует видимость всех записей до него:
java
volatile boolean flag = false;
  1. Финальные поля - корректная инициализация через конструктор.

  2. Методы из пакета java.util.concurrent:

  • Atomic классы (AtomicInteger и др.)
  • CountDownLatch, CyclicBarrier
  • ExecutorService (submit()/get())
  • Concurrent коллекции
  1. Thread.start() и Thread.join() - запуск и ожидание завершения потока.

Пример с volatile:

java
class Example {
    volatile boolean ready = false;
    
    void writer() {
        ready = true;  // запись happens-before чтение
    }
    
    void reader() {
        if (ready) {   // гарантированно увидит true
            // выполнить действие
        }
    }
}
Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

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

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

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