本文主要是介绍52.Fork Join线程池,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
介绍
jdk1.7之后加入的新的线程池的实现。
实现一种分治的思想。
适用于能够进行任务拆分的cpu密集型运算。
任务拆分
将一个大任务拆分为算法上相同的小任务,直至不能拆分可以直接求解。例如跟递归相关的一些计算,如归并排序、斐波那契数列都可以利用分治的思想。
Fork/Join是在分治的思想上加了多线程。可以把每个任务的分解和合并交给不同的线程来完成。进一步提升了运算效率。
Fork/Join默认会创建于cpu核心数大小相同的线程池。
案例:求1+2+3+...+n的和?
//RecursiveTask 递归任务-有返回值的
//RecursiveAction 递归任务-没有返回值
@Slf4j
class MyTask extends RecursiveTask<Integer> {private int n;public MyTask(int n) {this.n = n;}@Overridepublic String toString() {return "MyTask{" +"n=" + n +'}';}//计算1-n之间整数的和@Overrideprotected Integer compute() {if(n == 1) {//终止条件log.debug("join() {}", n);
这篇关于52.Fork Join线程池的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!