2、线程的并发工具类

Fork-join框架

在JDK1.7版本中提供了Fork-Join并行执行任务框架, 不需要我们创建线程、线程池等等。

分而治之

将一个大问题拆成小问题,小问题之间独立不影响的叫分而治之。小问题之间a->影响b的叫动态规划

Fork-join框架主要用在可以分而治之的地方。分而治之:将一个大问题,拆分成数个小问题,然后解决(递归) 比如:快速排序、二分查找、归并排序等。

image.png

标准范式

image.png

异步使用submit/execute提交,同步使用invoke
需要返回值使用RecursiveTask,不需要使用RecursiveAction

image.png
image.png

compute 方法

代码执行的逻辑放在 compute 方法,也就是 拆分和合并放在compute方法。
先判断是不是还需要拆分(满足要求),如果还要拆分就继续递归。否则就处理小任务代码,invokeAll执行所有。

工作密取

即当前线程的 Task 已经全被执行完毕,则自动取到其他线程的 Task 池中取 出 Task 继续执行。
该线程先执行完毕,会去池中别的线程那,从尾部取未执行完毕的任务。

用fork-join实现归并排序

归并排序

将数字拆成左右两组,再左组再拆分成左右两组。直到就剩2个。两两排序,然后把各组排序完的合并。这就是归并排序。

image.png

fork-join 归并排序

image.png
image.png
image.png

CountDownLatch

多线程中,先执行的线程可以等后执行的线程执行完事以后再执行。
例:主线程等所有其余线程全部初始化完后才允许调用。
例:我们想测试一个单例类。
例:主线程等所有子线程计算完事,返回给用户调用等。

image.png

image.png

image.png

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享