import java.util.concurrent.*;
public class TestMain {
public static void main(String[] args) {
CyclicBarrier cyclicBarrier = new CyclicBarrier(4, new Runnable() {
@Override
public void run() {
System.out.println("发车了");
}
});
for (int i = 0; i < 4; i++) {
System.out.println("第"+ i +"创建");
new Thread(new CyclicWorker(cyclicBarrier)).start();
try
{
Thread.sleep(1000);
} catch (InterruptedException e)
{
e.printStackTrace();
}
}
}
static class CyclicWorker implements Runnable {
private CyclicBarrier cyclicBarrier;
CyclicWorker(CyclicBarrier cyclicBarrier) {
this.cyclicBarrier = cyclicBarrier;
}
@Override
public void run() {
for (int i = 0; i < 2; i++) {
System.out.println("乘客:" + i);
try {
cyclicBarrier.await();
System.out.println("乘客 II:" + i);
cyclicBarrier.await();
System.out.println("标记");
} catch (InterruptedException e) {
e.printStackTrace();
} catch (BrokenBarrierException e) {
e.printStackTrace();
}
}
}
}
}
调用到await()后,要等到4个线程,然后执行一次 “发车了”, 后面又调用了一次await(),故又要等到4个线程,又执行一次“发车了”。又由于是for循环2次 故,总共打印4次