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

06-其他说明

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

其他说明

ForkJoinPool 类提供了其他方法来执行一个任务,具体如下。

  • execute(Runnable task) :这是本案例执行的 execute() 方法的另一个版本。本节提交了一个 Runnable 类型的任务到 ForkJoinPool 类中。需要注意的是 ForkJoinPool 类并未对 Runnable 对象使用工作量测算法,只是使用了 ForkJoin Task 对象。
  • invokeForkJoinTask<T>task ):在 ForkJoinPool 中, execute() 方法是异步调用方式。而在本案例中, invoke() 方法则是同步调用的。调用该方法后,直到任务作为参数传递结束执行,才会返回执行结果。
  • 当然也可以使用 ExecutorService 接口中声明的 invokeAll()invokeAny() 方法。虽然这些方法接收 Callable 对象作为参数,但是 ForkJoinPool 类未对 Callable 对象提供工作量测算法,所以最好使用 ThreadPoolExecutor 来执行它们。

ForkJoinTask 类也包括 invokeAll() 方法的其他版本,具体如下。

  • invokeAll(ForkJoinTask<?>... tasks) :该版本参数为变长数组,可以传递任意个 ForkJoinTask 对象。
  • invokeAll(Collection tasks) :该版本接收一个泛型 T 的对象集合(如 ArrayListLinkedList 或是 TreeSet ),泛型 T 必须是 ForkJoinTask 类或是其子类。

尽管 ForkJoinPool 类是设计用来执行 ForkJoinTask 对象的,但也可以直接执行 Runnable 或者 Callable 对象。可以使用 ForkJoinTaskadapt() 方法来接收一个 Callable 或者 Runnable 对象,并返回一个 ForkJoinTask 对象来执行任务。