🇨🇳 CyclicBarrier用法 🔄
科技
2025-03-01 13:39:22
导读 在Java并发编程中,有时候我们需要让多个线程等待,直到所有线程都到达一个特定的点,然后继续执行。这时,我们可以使用`CyclicBarrier`类
在Java并发编程中,有时候我们需要让多个线程等待,直到所有线程都到达一个特定的点,然后继续执行。这时,我们可以使用`CyclicBarrier`类来实现。它就像是一个门闩,所有线程都需要到达这个门闩前,门才会打开,所有线程才能继续执行。和其他屏障不同的是,`CyclicBarrier`可以重用。
首先,我们需要创建一个`CyclicBarrier`对象,并指定需要多少个线程到达这个屏障。例如,如果我们有5个线程,我们就可以这样创建:
```java
CyclicBarrier barrier = new CyclicBarrier(5);
```
接着,在每个线程中,我们需要调用`barrier.await()`方法来表示当前线程已经到达了屏障。如果所有线程都已经到达,那么`await()`方法将会返回,并且所有的线程都会继续执行。如果在等待过程中有线程被中断,那么会抛出`InterruptedException`异常。如果有一个线程在`await()`方法中等待时超时,那么会抛出`BrokenBarrierException`异常。
```java
new Thread(() -> {
// 线程的工作...
try {
barrier.await();
} catch (InterruptedException | BrokenBarrierException e) {
e.printStackTrace();
}
}).start();
```
`CyclicBarrier`还可以接受一个`Runnable`参数,当所有线程到达屏障时,这个`Runnable`会被执行。这可以用于完成一些共享的工作,比如统计结果等。