CyclicBarrier 达到要求以后继续执行await还会执行目标runnable吗,为什么我的完成最后任务打印了2次

import java.util.concurrent.CyclicBarrier;

public class CyclicBarrierDemo {

static class TaskThread extends Thread {

    CyclicBarrier barrier;

    public TaskThread(CyclicBarrier barrier) {
        this.barrier = barrier;
    }

    @Override
    public void run() {
        try {
            Thread.sleep(1000);
            System.out.println(getName() + " 到达栅栏 A");
            System.out.println("O(∩_∩)O哈哈~" + barrier.getNumberWaiting());
            barrier.await();
            System.out.println(getName() + " 冲破栅栏 A");

            Thread.sleep(2000);
            System.out.println(getName() + " 到达栅栏 B");
            System.out.println("哈哈" + barrier.getNumberWaiting());
            barrier.await();

            System.out.println(getName() + " 冲破栅栏 B");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

public static void main(String[] args) {
    int threadNum = 5;
    CyclicBarrier barrier = new CyclicBarrier(threadNum, new Runnable() {

        @Override
        public void run() {
            System.out.println(Thread.currentThread().getName() + " 完成最后任务");
        }
    });

    for(int i = 0; i < threadNum; i++) {
        new TaskThread(barrier).start();
    }
}

}

每一个 await() 都是一轮;
所有线程在到达第一个await()时,最后一个到达的线程会执行一次Runnable 里面的任务;
然后重置;
然后所有线程都继续执行,直到遇到第二个await(),等所有线程都到达第二个await()时,最后一个到达第二个await()的线程又会去执行一次Runnable 里面的任务;
然后再重置;
...

结果:会执行目标runnable
原理:new CyclicBarrier() 中的 Runnable 参数,意思就是最后一个到达线程要做的任务