在Java中,可以使用CyclicBarrier類來設(shè)置Barrier的閾值。CyclicBarrier類有一個構(gòu)造方法,可以指定需要等待的線程數(shù)量作為參數(shù),這個數(shù)量就是Barrier的閾值。當(dāng)?shù)却木€程數(shù)量達(dá)到指定的閾值時,所有線程將被釋放并繼續(xù)執(zhí)行。
下面是一個示例代碼,演示如何設(shè)置CyclicBarrier的閾值:
import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier;
public class BarrierExample {
public static void main(String[] args) {
int numberOfThreads = 3; // 設(shè)置Barrier的閾值為3
CyclicBarrier barrier = new CyclicBarrier(numberOfThreads, new Runnable() {
@Override
public void run() {
System.out.println("All threads have reached the barrier");
}
});
for (int i = 0; i < numberOfThreads; i++) {
Thread thread = new Thread(new Worker(barrier));
thread.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(); // 等待所有線程到達(dá)Barrier
System.out.println(Thread.currentThread().getName() + " has passed the barrier");
} catch (InterruptedException | BrokenBarrierException e) {
e.printStackTrace();
}
}
}
}
在上面的示例中,我們創(chuàng)建了一個CyclicBarrier對象,并指定了閾值為3。然后創(chuàng)建了3個Worker線程,每個線程在執(zhí)行過程中都會調(diào)用CyclicBarrier的await()方法來等待其他線程。當(dāng)所有線程都到達(dá)Barrier時,會執(zhí)行指定的Runnable任務(wù),并繼續(xù)執(zhí)行各個線程。