ForkJoinPool 是什么?
ForkJoinPool 是一个 Java 并发编程框架,用于解决分治算法中的任务拆分、执行、合并等问题,是 Java 7 引入的一个新的工具类。
ForkJoinPool 的基本思想是将一个大任务划分成若干个小任务,然后并行执行这些小任务,最后将它们的结果合并起来得到最终结果。ForkJoinPool 的实现采用了工作窃取算法,即当某个线程完成自己的任务后,会主动从其他线程的任务队列中“窃取”任务执行,以充分利用 CPU 的计算资源,提高程序的并行度和性能。
使用 ForkJoinPool 可以通过简单的几行代码就实现高效的并发任务执行,尤其适合处理递归式的任务。在 Java 8 中,Stream API 内部就是基于 ForkJoinPool 实现的。
什么是RecursiveTask ?
RecursiveTask是Java中Fork/Join框架提供的一个类,用于实现可递归地将一个任务拆分成多个小任务的任务。它是ForkJoinTask的一个子类,表示一个可分解的异步任务,通常用于处理需要分治的问题,如归并排序、快速排序等。
实现RecursiveTask需要重写它的compute()方法,该方法将问题分解成较小的子问题,每个子问题都会被分配到一个线程池中执行,并返回一个子问题的结果。当所有子问题的结果都被收集后,compute()方法会将它们合并成一个完整的结果,这个结果就是该任务的最终结果。
RecursiveTask与普通的ForkJoinTask的区别在于,它的compute()方法返回