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

16-结果分析

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

结果分析

案例执行后的输出结果如下图所示:

27.png 这个案例所解决的问题比较简单,有一个大矩阵,其元素为0~9的随机整数,想要知道某个数字在其中出现的次数。为了提升查询效率,可以采用分而治之的方法,将矩阵划分为5个子集,采用多线程的方式分别统计每个子集中某个数字出现的次数。这些线程执行的任务为 Searcher 对象。

在这里,可以采用一个 CyclicBarrier 对象来同步5个线程的完成状态[3]。对每个线程统计结果进行汇总得到最后结果。

正如之前介绍, CyclicBarrier 类定义了内部计数器,它对需要在同步状态点进行同步的线程数进行控制。每当一个线程执行到同步状态点时,它会通过调用 await() 通知 CyclicBarrier 对象有一个线程已达到同步状态点,这时 CyclicBarrier 对象将内部计数器的值减1,并将调用线程休眠,直到所有线程均达到同步状态点。

当所有线程均达到同步状态点后, CyclicBarrier 对象将唤醒所有因调用该对象 await() 方法而休眠等待的线程,并且该对象还会创建一个新的线程来执行在 CyclicBarrier 构造器中传入的 Runnable 对象(在本节案例中,这指 Grouper 对象)。