publicclassCyclicBarrierDemo{staticclassTaskThreadextendsThread{
CyclicBarrier barrier;publicTaskThread(CyclicBarrier barrier){this.barrier = barrier;}@Overridepublicvoidrun(){try{
TimeUnit.SECONDS.sleep(2);
System.out.println(this.getName()+" has arrived at barrier A.");
barrier.await();
System.out.println(this.getName()+" barrier A has been broken.");
TimeUnit.SECONDS.sleep(2);
System.out.println(this.getName()+" has arrived at barrier B.");
barrier.await();
System.out.println(this.getName()+" barrier B has been broken.");}catch(InterruptedException e){
e.printStackTrace();}catch(BrokenBarrierException e){
e.printStackTrace();}}}publicstaticvoidmain(String[] args){int threadNum =3;
CyclicBarrier barrier =newCyclicBarrier(threadNum,newRunnable(){@Overridepublicvoidrun(){
System.out.println(Thread.currentThread().getName()+"完成最后任务!");}});for(int i =0; i < threadNum; i++){newTaskThread(barrier).start();}}}
console output
Thread-1 has arrived at barrier A.
Thread-2 has arrived at barrier A.
Thread-0 has arrived at barrier A.
Thread-0完成最后任务!
Thread-0 barrier A has been broken.
Thread-1 barrier A has been broken.
Thread-2 barrier A has been broken.
Thread-0 has arrived at barrier B.
Thread-2 has arrived at barrier B.
Thread-1 has arrived at barrier B.
Thread-1完成最后任务!
Thread-1 barrier B has been broken.
Thread-0 barrier B has been broken.
Thread-2 barrier B has been broken.