CyclicBarrier 用法
时间: 2024-04-04 18:13:36 浏览: 63
CyclicBarrier 是 Java 中的一个同步工具类,它可以协调多个线程之间的执行。具体来说,当多个线程都达到了某个屏障点时,它们才能继续执行下去。
CyclicBarrier 的用法如下:
1. 创建一个 CyclicBarrier 对象,并指定需要等待的线程数量和屏障点执行的操作:
```
CyclicBarrier barrier = new CyclicBarrier(3, () -> {
// 屏障点执行的操作
System.out.println("All threads have reached the barrier");
});
```
2. 在需要等待的线程中,调用 await() 方法等待其他线程达到屏障点:
```
Thread thread1 = new Thread(() -> {
// 线程 1 执行的代码
try {
System.out.println("Thread 1 is waiting at the barrier");
barrier.await();
System.out.println("Thread 1 has passed the barrier");
} catch (InterruptedException | BrokenBarrierException e) {
e.printStackTrace();
}
});
```
3. 启动线程并等待它们执行完毕:
```
thread1.start();
// 启动其他线程
thread1.join();
// 等待其他线程执行完毕
```
在上面的例子中,我们创建了一个 CyclicBarrier 对象,需要等待 3 个线程到达屏障点才能继续执行。线程 1 在执行过程中调用了 await() 方法等待其他线程,当所有线程都到达屏障点时,屏障点执行的操作会被执行。最后,我们等待所有线程执行完毕,程序结束。
需要注意的是,如果在等待过程中有一个线程被中断或者屏障点执行的操作抛出异常,那么所有等待的线程都会被中断并抛出 BrokenBarrierException 异常。
阅读全文