场景
日常操作:老爸陪老妈逛街一起出门打车,老爸在家先收拾家务,老妈化妆,然后一起打车出门。
实现
public class CyclicBarrierTest {
private static final CyclicBarrier cb = new CyclicBarrier(2, new Runnable() {
@Override
public void run() {
System.out.println("一起打车出门");
}
});
public static void main(String[] args) {
ThreadPoolExecutor tpe = new ThreadPoolExecutor(2,
2,
20,
TimeUnit.SECONDS,
new ArrayBlockingQueue<Runnable>(10));
tpe.allowCoreThreadTimeOut(true);
tpe.execute(new Runnable() {
@Override
public void run() {
try {
System.out.println("老爸收拾家务");
cb.await();
} catch (InterruptedException | BrokenBarrierException e) {
e.printStackTrace();
}
}
});
tpe.execute(new Runnable() {
@Override
public void run() {
try {
System.out.println("老妈化妆");
cb.await();
} catch (InterruptedException | BrokenBarrierException e) {
e.printStackTrace();
}
}
});
}
}
结果:
老爸收拾家务
老妈化妆
一起打车出门
总结:
多个线程到达指定的屏障点,才可以执行。最后一个线程到达屏障后,最后执行的线程在构造器传入。还可以通过reset方法还可以重置屏障为初始化状态。
网友评论