Класс Phaser в Java — это синхронизатор, который позволяет координировать выполнение нескольких потоков, разбитых на фазы. Он похож на CountDownLatch и CyclicBarrier, но более гибкий.
Опишите, что представляет собой класс Phaser в контексте механизма мониторинга в программировании.
Класс 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 используется для поэтапной синхронизации потоков с возможностью динамического изменения числа участников.