juc Phaser示例
时间: 2023-07-07 20:12:30 浏览: 108
好的,下面是一个简单的juc Phaser示例,展示了如何使用Phaser实现线程同步:
```java
import java.util.concurrent.Phaser;
public class PhaserExample {
public static void main(String[] args) {
final int PHASE_COUNT = 3;
final int THREAD_COUNT = 3;
Phaser phaser = new Phaser(PHASE_COUNT);
for (int i = 0; i < THREAD_COUNT; i++) {
new Thread(() -> {
try {
for (int j = 0; j < PHASE_COUNT; j++) {
System.out.println("Thread " + Thread.currentThread().getName() + " is waiting at phase " + j);
phaser.arriveAndAwaitAdvance();
System.out.println("Thread " + Thread.currentThread().getName() + " passed phase " + j);
}
} catch (Exception e) {
e.printStackTrace();
}
}, "thread-" + i).start();
}
}
}
```
在这个示例中,我们创建了一个`Phaser`对象,并使用它来同步3个线程。每个线程都会在每个阶段中等待其他线程到达,并且在所有线程都到达时一起继续执行。Phaser的构造函数接受一个参数,表示要同步的阶段数。在这个例子中,我们使用了3个阶段,因此Phaser会等待所有线程都通过了3个阶段后才会结束同步。
希望这个示例能够帮助你理解如何使用Phaser实现线程同步。
阅读全文