Fork-join框架
在JDK1.7版本中提供了Fork-Join并行执行任务框架, 不需要我们创建线程、线程池等等。
分而治之
将一个大问题拆成小问题,小问题之间独立不影响的叫分而治之。小问题之间a->影响b的叫动态规划
Fork-join框架主要用在可以分而治之的地方。分而治之:将一个大问题,拆分成数个小问题,然后解决(递归) 比如:快速排序、二分查找、归并排序等。
标准范式
异步使用submit/execute提交,同步使用invoke
需要返回值使用RecursiveTask,不需要使用RecursiveAction
compute 方法
代码执行的逻辑放在 compute 方法,也就是 拆分和合并放在compute方法。
先判断是不是还需要拆分(满足要求),如果还要拆分就继续递归。否则就处理小任务代码,invokeAll执行所有。
工作密取
即当前线程的 Task 已经全被执行完毕,则自动取到其他线程的 Task 池中取 出 Task 继续执行。
该线程先执行完毕,会去池中别的线程那,从尾部取未执行完毕的任务。
用fork-join实现归并排序
归并排序
将数字拆成左右两组,再左组再拆分成左右两组。直到就剩2个。两两排序,然后把各组排序完的合并。这就是归并排序。
fork-join 归并排序
CountDownLatch
多线程中,先执行的线程可以等后执行的线程执行完事以后再执行。
例:主线程等所有其余线程全部初始化完后才允许调用。
例:我们想测试一个单例类。
例:主线程等所有子线程计算完事,返回给用户调用等。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END