Série: Java Old
java
47 linhas
· Atualizado 2026-02-04
PhaserDemo.java
Java_Old/advanced/concurrency_course/module03/src/concurrency/module03/PhaserDemo.java
package concurrency.module03;
import java.util.concurrent.Phaser;
/**
* Demonstrates {@link java.util.concurrent.Phaser}: a reusable barrier for
* multi-phase coordination. Parties register with the phaser; at each phase
* they call arriveAndAwaitAdvance() and block until all registered parties
* have arrived, then the phase number advances.
*
* <p>Use case: multi-stage pipelines (e.g. batch processing) where every worker
* must finish phase N before any proceed to phase N+1. Unlike CountDownLatch,
* Phaser supports dynamic registration and multiple phases.
*
* <p>Here we use a "main" party (register 1) so that we can deregister it and
* allow the worker threads to run; each worker goes through 3 phases then deregisters.
*/
public class PhaserDemo {
/**
* Registers 3 worker threads with a Phaser(1) (one party = main). Each worker
* runs phase 0, arriveAndAwaitAdvance(), phase 1, arriveAndAwaitAdvance(),
* phase 2, then arriveAndDeregister(). Main deregisters so the registered
* count matches the 3 workers.
*
* @param args unused
*/
public static void main(String[] args) {
int parties = 3;
Phaser phaser = new Phaser(1);
for (int i = 0; i < parties; i++) {
int id = i;
phaser.register();
new Thread(() -> {
System.out.println("Phase 0: worker " + id);
phaser.arriveAndAwaitAdvance();
System.out.println("Phase 1: worker " + id);
phaser.arriveAndAwaitAdvance();
System.out.println("Phase 2: worker " + id + " done");
phaser.arriveAndDeregister();
}).start();
}
phaser.arriveAndDeregister();
}
}
Artigos relacionados
Java Old
java
Atualizado 2026-02-03
Main.java
Main.java — java source code from the Java Old learning materials (Java_Old/Main.java).
Ler artigo →
Java Old
java
Atualizado 2026-02-03
Student.java
Student.java — java source code from the Java Old learning materials (Java_Old/Student.java).
Ler artigo →
Java Old
java
Atualizado 2026-02-03
01_Generics.java
01_Generics.java — java source code from the Java Old learning materials (Java_Old/advanced/01_Generics.java).
Ler artigo →
Java Old
java
Atualizado 2026-02-03
02_Collections.java
02_Collections.java — java source code from the Java Old learning materials (Java_Old/advanced/02_Collections.java).
Ler artigo →
Java Old
java
Atualizado 2026-02-03
03_Streams.java
03_Streams.java — java source code from the Java Old learning materials (Java_Old/advanced/03_Streams.java).
Ler artigo →
Java Old
java
Atualizado 2026-02-03
CollectionsExample.java
CollectionsExample.java — java source code from the Java Old learning materials (Java_Old/advanced/CollectionsExample.java).
Ler artigo →