CyclicBarrier ,和countDownLatch相反,CyclicBarrier要做加法,加到制定值,释放唤醒等待的线程;
public static void main(String[] args) throws BrokenBarrierException, InterruptedException {
CyclicBarrier cyclicBarrier = new CyclicBarrier(7,()->{
System.out.println("召唤");
});
for (int i = 1; i<=7;i++){
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("收集第" +Thread.currentThread().getName() + "颗" );
try {
cyclicBarrier.await();
//等待被唤醒,唤醒后的操作
} catch (InterruptedException e) {
e.printStackTrace();
} catch (BrokenBarrierException e) {
e.printStackTrace();
}
}
},String.valueOf(i)).start();
}
}
比如收集到七颗龙珠,才能召唤神龙,必须得等七颗全部收集齐;
做加法, 加到7,召唤神龙