资讯专栏INFORMATION COLUMN

java并发编程学习之Fork/Join 框架-基本概念(一)

hikui / 357人阅读

摘要:思想把大任务分割成多个小任务,再把小任务的结果汇总,最终得到大任务的结果。当一个线程执行完当前队列的任务时,他就会去窃取其他队列的任务来执行。当双端队列只有一个任务时,线程之间会竞争。

思想

把大任务分割成多个小任务,再把小任务的结果汇总,最终得到大任务的结果。

步骤如下:

任务分割

结果汇总

示例图

工作窃取

指的是线程从其他线程窃取任务来执行。当一个大任务分割成多个小任务的时候,为了减少线程之间的竞争,把小任务放在不同的队列里,每个队列都分配一个线程来执行任务。当一个线程执行完当前队列的任务时,他就会去窃取其他队列的任务来执行。由于都是同一个队列执行小任务,为了减少线程之间的竞争,窃取任务的时候,从队列的尾部拿任务。

优点:充分利用了线程的计算,减少线程之间的竞争

缺点:

消耗系统资源,比如创建线程和多个双端队列。

当双端队列只有一个任务时,线程之间会竞争。

示例图

ForkJoinTask

实现了Future的接口,主要的子类有RecursiveAction和RecursiveTask。

RecursiveAction:没有返回值

RecursiveTask:有返回值

主要的方法:

fork():再创建一个子任务

invoke():执行任务

join():返回计算后的结果

ForkJoinPool

通过调用invoke来执行ForkJoinTask的任务。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/75262.html

相关文章

  • java并发编程习之Fork/Join 框架-RecursiveTask(二)

    摘要:示例计算一组数据,设置阈值为,也就是说每次计算的数量不超过个。总数总数运行结果如下可以看出,两次结果是一样的。创建继承的类,实现方法,这里主要是计算以及拆分任务合并结果。 示例 计算一组数据,设置阈值为50,也就是说每次计算的数量不超过50个。 public class RecursiveTaskDemo extends RecursiveTask { private stat...

    TerryCai 评论0 收藏0
  • java并发编程习之基础概念

    摘要:线程和进程参考进程和线程的区别和联系线程线程作为独立运行和独立调度的基本单位。由于线程比进程更小,基本上不拥有系统资源,故对它的调度所付出的开销就会小得多,能更高效的提高系统内多个程序间并发执行的程度。进程进程作为分配资源的基本单位。 线程和进程 参考进程和线程的区别和联系 线程:线程作为独立运行和独立调度的基本单位。由于线程比进程更小,基本上不拥有系统资源,故对它的调度所付出的开销...

    enali 评论0 收藏0
  • java并发编程习之synchronize(

    摘要:线程安全问题在并发编程学习之基础概念提到,多线程的劣势之一,有个线程安全问题,现在看看下面的例子。那么,该怎么解决呢,很简单,在方法前加个同步锁。运行结果如下有两种情况,是因为看谁先抢占锁,但是输出的算法结果是正确的。 线程安全问题 在java并发编程学习之基础概念提到,多线程的劣势之一,有个线程安全问题,现在看看下面的例子。 public class NotSafeDemo { ...

    Elle 评论0 收藏0
  • 想进大厂?50个多线程面试题,你会多少?【后25题】(二)

    摘要:大多数待遇丰厚的开发职位都要求开发者精通多线程技术并且有丰富的程序开发调试优化经验,所以线程相关的问题在面试中经常会被提到。掌握了这些技巧,你就可以轻松应对多线程和并发面试了。进入等待通行准许时,所提供的对象。 最近看到网上流传着,各种面试经验及面试题,往往都是一大堆技术题目贴上去,而没有答案。 不管你是新程序员还是老手,你一定在面试中遇到过有关线程的问题。Java语言一个重要的特点就...

    caozhijian 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<