7.5 Fork/Join框架的其他方法
在本章的三个例子中,我们用到了构成Fork/Join框架的类的很多方法,除此之外,你还需要了解一下其他一些有用的方法。
使用ForkJoinPool类的execute()方法和invoke()方法将任务发送给池。还可以使用另一个名为submit()的方法。它们之间的主要区别在于:execute()方法将任务发送给ForkJoinPool之后立即返回一个void值;invoke()方法将任务发送给ForkJoinPool后,当任务完成执行后方可返回;而submit()方法将任务发送给ForkJoinPool之后立即返回一个Future对象,用以控制任务的状态并且获得其结果。
本章所有示例使用的类均基于ForkJoinTask类,不过你也可以使用基于Runnable接口和Callable接口的ForkJoinPool任务。为实现这一目标,可以使用submit()方法。该方法有接收Runnable对象作为参数的版本、接收含有结果的Runnable对象作为参数的版本和接收Callable对象作为参数的版本。
ForkJoinTask类提供了get(long timeout, TimeUnit unit)方法来获取某个任务返回的结果。该方法在参数中指定了等待任务结果的时间周期。如果该任务在这一时间周期结束之前完成了执行,则该方法返回相应结果。否则,该方法抛出一个TimeoutException异常。
ForkJoinTask类为invoke()方法提供了一种替代方案,即quietlyInvoke()方法。这两种方法的主要区别在于,invoke()方法返回任务执行的结果或者在必要时抛出异常,而quietlyInvoke()方法不返回任务的结果,也不抛出任何异常。后者与示例中用到的quietlyJoin()方法相似。
