方法:
int await() //在所有参与者都已经在此 barrier 上调用 await 方法之前,将一直等待。
方法之前将一直等待,或者超出了指定的等待时间。
int getNumberWaiting() //返回当前在屏障处等待的参与者数目。
int getParties() //返回要求启动此 barrier 的参与者数目。
boolean isBroken() //查询此屏障是否处于损坏状态。
void reset() //将屏障重置为其初始状态。
下面我们来看一个小程序了解一下CyclicBarrier的使用方式:
public class CyclicBarrierTest {
static CyclicBarrier c = new CyclicBarrier(2);
public static void main(String[] args) {
new Thread(new Runnable() {
@Override
public void run() {
try {
c.await();
} catch (Exception e) {
}
System.out.println(Thread.currentThread().getName()+"正在等待...");
}
}).start();
try {
c.await();
} catch (Exception e) {
}
System.out.println(Thread.currentThread().getName()+"正在等待...");
System.out.println("人够了,出发吧 当前有 "+c.getParties()+" 个人参与比赛");
}
}
输出结果为:
Thread-0正在等待...
main正在等待...
人够了,出发吧 当前有 2 个人参与比赛
Process finished with exit code 0
在上面程序中如果我们把”static CyclicBarrier c = new CyclicBarrier(2);”中的参数2修改为3的话改程序中的线程Thread-0和main则会一直等待下去,因为CyclicBarrier是让一组线程到达一个屏障(也可以叫同步点)时被阻塞,直到最后一个线程到达屏障时,屏障才会开门,而这最后一个线程迟迟不来,所以屏障也不会被打开。
方法:
int await() //在所有参与者都已经在此 barrier 上调用 await 方法之前,将一直等待。
方法之前将一直等待,或者超出了指定的等待时间。
int getNumberWaiting() //返回当前在屏障处等待的参与者数目。
int getParties() //返回要求启动此 barrier 的参与者数目。
boolean isBroken() //查询此屏障是否处于损坏状态。
void reset() //将屏障重置为其初始状态。
下面我们来看一个小程序了解一下CyclicBarrier的使用方式:
public class CyclicBarrierTest {
static CyclicBarrier c = new CyclicBarrier(2);
public static void main(String[] args) {
new Thread(new Runnable() {
@Override
public void run() {
try {
c.await();
} catch (Exception e) {
}
System.out.println(Thread.currentThread().getName()+"正在等待...");
}
}).start();
try {
c.await();
} catch (Exception e) {
}
System.out.println(Thread.currentThread().getName()+"正在等待...");
System.out.println("人够了,出发吧 当前有 "+c.getParties()+" 个人参与比赛");
}
}
输出结果为:
Thread-0正在等待...
main正在等待...
人够了,出发吧 当前有 2 个人参与比赛
Process finished with exit code 0
在上面程序中如果我们把”static CyclicBarrier c = new CyclicBarrier(2);”中的参数2修改为3的话改程序中的线程Thread-0和main则会一直等待下去,因为CyclicBarrier是让一组线程到达一个屏障(也可以叫同步点)时被阻塞,直到最后一个线程到达屏障时,屏障才会开门,而这最后一个线程迟迟不来,所以屏障也不会被打开。