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

23-结果分析

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

结果分析

fork/join框架使用的线程称为工作线程。Java中包含的 ForkJoinWorkerThread 类扩展了 Thread 类并实现了fork/join框架使用的工作线程。

本节实现了 MyWorkerThread 类,它扩展了 ForkJoinWorkerThread 类并重写了它的两个方法。目标就是在每个工作线程中实现一个任务计数器,以便可以知道工作线程执行了多少个任务。使用 ThreadLocal 字段来实现计数器。这样,每个线程都会以透明的方式为使用者提供计数器。

重写 ForkJoinWorkerThread 类的 onStart() 方法可以初始化任务计数器,当工作线程开始执行时调用此方法。重写 onTermination() 方法可以将任务计数器的值打印到控制台,当工作线程完成其执行时会调用此方法。另外,在 MyWorkerThread 类中实现的 addTask() 方法可以递增每个线程的任务计数器。

与Java并发API中的所有执行器一样,由于 ForkJoinPool 类使用工厂创建其线程,因此,如果想在 ForkJoinPool 类中使用 MyWorkerThread 线程,那么必须实现自己的线程工厂。对于fork/join框架来说,该工厂必须实现 ForkJoinPool.ForkJoinWorker ThreadFactory 类。为此,应实现 MyWorkerThreadFactory 类。它只有一个方法可以创建一个新的 MyWorkerThread 对象。

最后,只需要用所创建的工厂初始化一个 ForkJoinPool 类。可在 Main 类中使用 ForkJoinPool 类的构造方法来完成此操作。

下图显示了该程序输出的一部分。

68.png 可以看到, ForkJoinPool 对象如何执行4个工作线程以及每个线程执行了多少个任务。