← Назад к вопросам

Что такое монитор Phaser?

2.8 Senior🔥 91 комментариев
#Многопоточность

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Что такое монитор Phaser?

Пhaser — это синхронизатор из пакета java.util.concurrent, который позволяет потокам синхронизироваться в определённых точках программы. Это многоразовый барьер, через который должно пройти фиксированное количество потоков перед тем, как продолжить выполнение.

Основные характеристики

Отличие от других синхронизаторов:

  • CountDownLatch работает в одном направлении (один раз), Phaser многоразовый
  • CyclicBarrier похож, но Phaser более гибкий и имеет фазы
  • Phaser поддерживает динамическое добавление/удаление потоков

Основные методы

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

// Регистрация нового участника
phaser.register();

// Ожидание других потоков (await barrier)
int phase = phaser.arriveAndAwaitAdvance();

// Сообщение о завершении фазы без ожидания
phaser.arriveAndDeregister();

// Только сообщить о прибытии
phaser.arrive();

// Проверить текущую фазу
int currentPhase = phaser.getPhase();

Пример использования

public class PhaserExample {
    public static void main(String[] args) {
        Phaser phaser = new Phaser(1); // Начинаем с одного участника (main thread)
        
        // Запускаем 3 рабочих потока
        for (int i = 1; i <= 3; i++) {
            phaser.register(); // Добавляем участника
            new Thread(() -> {
                System.out.println(Thread.currentThread().getName() + " фаза 1");
                phaser.arriveAndAwaitAdvance();
                
                System.out.println(Thread.currentThread().getName() + " фаза 2");
                phaser.arriveAndAwaitAdvance();
                
                System.out.println(Thread.currentThread().getName() + " завершено");
                phaser.arriveAndDeregister();
            }).start();
        }
        
        // Main thread тоже участвует
        phaser.arriveAndDeregister();
    }
}

Практическое применение

  1. Волновая обработка данных — несколько этапов обработки, каждый этап начинается когда завершены все предыдущие
  2. Многоэтапные тесты — синхронизация нескольких тестовых потоков
  3. Параллельные вычисления — map-reduce паттерны где нужна барьерная синхронизация между фазами

Важные особенности

  • Динамичность — можно регистрировать/удалять потоки на ходу
  • Фазовость — автоматически переходит на следующую фазу когда все потоки прибыли
  • Оверлоад onAdvance() — можно переопределить поведение при переходе между фазами
  • Аварийное завершение — forceTermination() для экстренной остановки

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

Что такое монитор Phaser? | PrepBro