线程十六:CyclicBarrier

"同步屏障"指的是一组线程互相等待,直到到达某个公共的屏障点。"同步屏障"通常用在数量固定且在执行过程中需要等待彼此执行的多线程应用中。

CyclicBarrier类实现了同步屏障,可以通过使用构造器CyclicBarrier(int parties)来创建其对象,其中的parties代表拥有共同执行目标的线程数量,也可以通过构造器CyclicBarrier(int parties,Runnable barrierAction)来创建指定任务的同步屏障,其特点是最后一条线程到达屏障点之后会执行barrierAction任务,然后其他线程继续执行。构造器参数的parties如果小于1,构造器会抛出异常,如果把barrierAction设置为null,那么当最后一条线程跨越屏障时不会执行任务。

CyclicBarrier定义了如下的方法:1.await方法会强制调用线程一直等待,直到所有的线程都执行了await方法。2.await(long timeout,TimeUnit unit)与前一个方法的区别是增加了等待的时间,其他功能一样。3.getNumberWaiting方法返回当前在同步屏障上等待的线程数目。4.getParties方法返回要跨越屏障的线程数目。5.reset方法会重置屏障到初始状态,这个方法并不常用。

为了演示同步屏障CyclicBarrier的应用,我们看一个例子:

这个例子是Javadoc文档中给出的示例代码,演示了如何使用3个线程完成一个二维数组的处理过程,当处理结束后把结果打印出来。

参考链接

猜你喜欢

转载自blog.csdn.net/qq_34479912/article/details/82729518