Sobes.tech
Назад к вопросам
Junior — Middle
73

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

Ответ от нейросети

sobes.tech AI

Класс 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 используется для поэтапной синхронизации потоков с возможностью динамического изменения числа участников.