Java多线程同步屏障CyclicBarrierDemo对象
一、概述 同步屏障可以使多条线程彼此等待,直到抵达某个公共的屏障点。线程之间彼此等待时已经抵达公共屏障点的线程不会继续往下执行,会在所有线程抵达公共屏障点之前一直阻塞。CyclicBarrierDemo对象可以重用,这点与上一篇中的CountDownLatch对象不同,CountDowLatch时不可重用的。 二、主要方法 CyclicBarrier(int parties):初始化一个包含指定parties数目的CyclicBarrier对象 int await() throws InterruptedException, BrokenBarrierException:强制阻塞线程,一直等待所有的parties线程都在同步屏障上调用了await()方法 int await(long time, DateUtil util):指定线程的等待时间,如果超时会抛出异常 void reset():重置对象,如果此时有线程在这个对象上阻塞,则会抛出异常 int getNumberWaiting(): 返回阻塞的线程数量。 三、代码示例 高速公路的建造:高速公路的建造不是从头到尾建造的,高速公路在规划后之后,会将规划路线分段施工,一般情况下一条完整的高速公路在施工时是好几段同时施工的。下面我们使用CyclicBarrierDemo对象来实现建造一条完整高速公路的场景。 如上图中所示