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
对象来执行任务。