Опишите, что представляет собой класс Phaser в контексте механизма мониторинга в программировании.

Класс Phaser в Java — это синхронизатор, который позволяет координировать выполнение нескольких потоков, разбитых на фазы. Он похож на CountDownLatch и CyclicBarrier, но более гибкий.

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

Что ответить на собеседовании

Класс Phaser в Java — это синхронизатор, который позволяет координировать выполнение нескольких потоков, разбитых на фазы. Он похож на CountDownLatch и CyclicBarrier, но более гибкий.

Подробный разбор

Ответ с пояснениями

Класс Phaser в Java — это синхронизатор, который позволяет координировать выполнение нескольких потоков, разбитых на фазы. Он похож на CountDownLatch и CyclicBarrier, но более гибкий.

Ключевые особенности:

  • Позволяет потокам регистрироваться и дeregister-иться динамически.
  • Поддерживает несколько фаз: после того, как все зарегистрированные потоки вызовут arrive(), фаза считается завершённой, и начинается следующая.
  • Можно переопределить метод onAdvance(), чтобы выполнять действия при переходе между фазами или завершении работы.

Пример:

Phaser phaser = new Phaser(3); // 3 участника

Runnable task = () -> {
    System.out.println(Thread.currentThread().getName() + " начал фазу 1");
    phaser.arriveAndAwaitAdvance(); // ждем остальных

    System.out.println(Thread.currentThread().getName() + " начал фазу 2");
    phaser.arriveAndAwaitAdvance();

    phaser.arriveAndDeregister(); // выход из phaser
};

for (int i = 0; i < 3; i++) {
    new Thread(task).start();
}

Таким образом, Phaser используется для поэтапной синхронизации потоков с возможностью динамического изменения числа участников.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее