在Java中,可以使用CyclicBarrier類來實現線程間的協作。CyclicBarrier是一種同步輔助工具,它允許一組線程在達到一個共同的屏障點之前相互等待。
下面是一個簡單的示例,演示如何使用CyclicBarrier來實現線程間的協作:
import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier;
public class BarrierExample {
public static void main(String[] args) {
CyclicBarrier barrier = new CyclicBarrier(3);
Thread thread1 = new Thread(new Worker(barrier));
Thread thread2 = new Thread(new Worker(barrier));
Thread thread3 = new Thread(new Worker(barrier));
thread1.start();
thread2.start();
thread3.start();
}
static class Worker implements Runnable {
private CyclicBarrier barrier;
public Worker(CyclicBarrier barrier) {
this.barrier = barrier;
}
@Override
public void run() {
try {
System.out.println(Thread.currentThread().getName() + " is waiting at the barrier");
barrier.await();
System.out.println(Thread.currentThread().getName() + " has passed the barrier");
} catch (InterruptedException | BrokenBarrierException e) {
e.printStackTrace();
}
}
}
}
在上面的示例中,我們創建了一個CyclicBarrier,并傳入一個屏障點的數量為3。然后我們創建了三個線程,并讓它們執行Worker類的run方法。在Worker類的run方法中,線程會先打印出自己正在等待在屏障點的信息,然后調用barrier.await()方法等待其他線程到達屏障點。當所有線程都到達屏障點時,它們就會繼續執行后面的邏輯。
通過使用CyclicBarrier,我們可以實現多個線程之間的協作,讓它們在達到一個共同的屏障點之前相互等待,然后再一起繼續執行后續的任務。這種方式可以很好地控制線程之間的執行順序和協作關系。