当前位置:嗨网首页>书籍在线阅读

17-其他说明

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

其他说明

CyclicBarrier 类还提供了 await() 方法的另一个重载版本。

  • await(long time, TimeUnit unit) :在这个方法中,线程将会在 CyclicBarrier 对象内部的计数器的值达到 0 或者指定的时间后,中断休眠。 TimeUnit 类是一个枚举类型,它有如下常量: DAYSHOURSMICROSECONDSMILLISECONDSMINUTESNANOSECONDSSECONDS

这个类还提供了 getNumberWaiting() 方法,该方法会返回因调用 await() 而休眠等待的线程数;这个类也提供了 getParties() ,该方法返回 CyclicBarrier 对象同步的任务数。

重置CyclicBarrier对象

虽然 CyclicBarrier 类和 CountDownLatch 类有很多相似点,但是它们也有一些不同。最重要的一点是, CyclicBarrier 对象能够通过使内部计数器恢复为初始化状态,从而实现重置。

CyclicBarrier 类提供的 reset() 方法可以实现重置。当调用这个方法后,所有因调用 await() 方法而休眠等待的线程,将收到 BrokenBarrierException 异常。在本案例的异常处理中,会将异常信息栈打印输出。然而,在更复杂的应用中,可以在此处进行其他处理,比如重启执行或者恢复中断点的操作。

被破坏的CyclicBarrier对象

CyclicBarrier 对象可以处于一个特殊的状态,被称为“损坏状态”。当多个线程因调用 await() 方法而等待时,若其中一个被中断了,则此线程会收到 Interrupted- Exception 异常,而其他线程将收到 BrokenBarrierException 异常,并且 Cyclic- Barrier 对象会进入损坏状态。

CyclicBarrier 类提供了 isBroken() 方法。如果 CyclicBarrier 对象处于损坏状态,则调用该方法将返回 true ;否则,将返回 false