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

13-在指定状态点同步任务

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

3.4 在指定状态点同步任务

Java并发API提供了可以使多个线程在一个指定点同步的工具类 CyclicBarrier ,该类与3.3节中介绍的 CountDownLatch 有些类似,但是它的一些特殊性使得其更为强大。

CyclicBarrier 类的构造器需要有一个整型参数,这个参数表示在指定点进行同步的线程个数。当需要同步的线程运行到指定点时,可以调用 CyclicBarrier 对象的 await() 方法,然后等待其他线程达到指定点。这个方法使调用线程休眠,等待其他线程的到达。当最后一个需要同步的线程到达并调用 CyclicBarrier 对象的 await() 方法时[2],所有在此等待的线程都会被唤醒并继续执行。

CyclicBarrier 类有一个有趣的优点,它提供的一个重载的构造方法可以额外接收一个 Runnable类 型的初始化参数。这样的话, CyclicBarrier 对象会在所有同步线程到达指定点后,将 Runnable 对象当作一个线程对象来执行。这个特点使得该类适合采用分而治之的编程技术来处理并发任务。

本节将介绍如何使用 CyclicBarrier 类使得一组线程在某个指定点实现同步。并且使用 Runnable 对象使其在所有线程达到指定点后才执行。在这个案例中,将实现在矩阵中查找一个指定数字的功能。案例的实现思路为:将矩阵划分为多个子集,在每个不同的子集中,均有一个线程执行查找功能,一旦所有查找结束后,启动最终任务对所有线程的查找结果进行总结。