允许一组线程全部等待彼此达到共同屏障点的同步辅助。就像跑步比赛,等所有运动员都到达终点,才把成绩给报上去。
独占锁
源码分析
await()
所有的线程到这儿就暂停等待,等所有的线程都执行到这儿之后,才能执行下面的操作。
如果当前线程不是最后一个线程,那么它被禁用以进行线程调度,并且处于休眠状态,知道发生下列事情之一:
- 最后一个线程到达
- 一些其他线程当前线程为interrupt
- 一些其他线程interrupt其他等待线程之一
- 一些其他线程在等待屏障时超时
- 其他一些线程在这个屏障上调用reset()
使用场景
单元测试并发的时候,可以使用该类。
static AtomicInteger i = new AtomicInteger(0);public static void main(String[] args) {CyclicBarrier cyclicBarrier = new CyclicBarrier(10);for ( int i = 0; i < 30; i++) {new Thread(() -> {try{cyclicBarrier.await();print();}catch(Exception e){}}).start();}}private static void print(){if(i.getAndIncrement() % 2 ==0){System.out.println("do task...");}else {System.out.println("sleep...");}}
