06-其他说明
其他说明
ForkJoinPool 类提供了其他方法来执行一个任务,具体如下。
execute(Runnable task):这是本案例执行的execute()方法的另一个版本。本节提交了一个Runnable类型的任务到ForkJoinPool类中。需要注意的是ForkJoinPool类并未对Runnable对象使用工作量测算法,只是使用了ForkJoin Task对象。invoke(ForkJoinTask<T>task):在ForkJoinPool中,execute()方法是异步调用方式。而在本案例中,invoke()方法则是同步调用的。调用该方法后,直到任务作为参数传递结束执行,才会返回执行结果。- 当然也可以使用
ExecutorService接口中声明的invokeAll()和invokeAny()方法。虽然这些方法接收Callable对象作为参数,但是ForkJoinPool类未对Callable对象提供工作量测算法,所以最好使用ThreadPoolExecutor来执行它们。
ForkJoinTask 类也包括 invokeAll() 方法的其他版本,具体如下。
invokeAll(ForkJoinTask<?>... tasks):该版本参数为变长数组,可以传递任意个ForkJoinTask对象。invokeAll(Collection tasks):该版本接收一个泛型T的对象集合(如ArrayList、LinkedList或是TreeSet),泛型T必须是ForkJoinTask类或是其子类。
尽管 ForkJoinPool 类是设计用来执行 ForkJoinTask 对象的,但也可以直接执行 Runnable 或者 Callable 对象。可以使用 ForkJoinTask 的 adapt() 方法来接收一个 Callable 或者 Runnable 对象,并返回一个 ForkJoinTask 对象来执行任务。