Java JUC工具类--ForkJoin
ForkJoin
- Fork/Join框架是JAVA7提供的一个用于并行执行任务的框架,是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架
Fork/Join中两个重要的类
- ForkJoinTask:使用该框架,需要创建一个ForkJoin任务,它提供在任务中执行fork和join操作的机制。
- 一般情况下,我们并不需要直接继承ForkJoinTask类,只需要继承它的子类,它的子类有两个:
- RecursiveAction:用于没有返回结果的任务
- RecursiveTask:用于有返回结果的任务
- ForkJoinPool:任务ForkJoinTask需要通过ForkJoinPool来提交任务
package com.example.core.juc;import java.util.concurrent.*;public class UseForkJoin extends RecursiveTask<Integer> {//执行计算并要求返回结果的需要继承RecursiveTask<Integer>//RecursiveTask<Integer>其中Integer为计算的类型private static final int THRESHOLD = 2;//阈值,也就是拆分的原则private int start;private int end;public UseForkJoin(int start,int end){this.start = start;this.end = end;}@Overrideprotected Integer compute(){int sum = 0; //1+2+3+......+100boolean canCompute = (end - start) <= THRESHOLD;if(canCompute){for(int i = start;i<=end;i++){sum += i;}}else{//如果,任务数大于阈值的情况,就进行拆分 fork操作 然后去join//1 + 100/2 = 50int middle = (start + end)/2;UseForkJoin leftTask = new UseForkJoin(start,middle);UseForkJoin rightTask = new UseForkJoin(middle+1,end);//执行左右两边的任务leftTask.fork();rightTask.fork();//等待任务执行完成之后,进行获取结果int leftResult = leftTask.join();int rightResult = rightTask.join();sum = leftResult + rightResult;}return sum;}public static void main(String[] args) throws InterruptedException, ExecutionException {ForkJoinPool pool = new ForkJoinPool();UseForkJoin ufj = new UseForkJoin(1,100);Future<Integer> result = pool.submit(ufj);System.out.println("最终的结果是:"+result.get());}
}
/*
output:
最终的结果是:5050*/
Java JUC工具类--ForkJoin相关推荐
- Java JUC工具类--Future
Future模式,也是非常经典的设计模式,这种模式主要就利用空间换时间的概念,也就是说异步执行(需要开启一个新的线程) 在互联网高并发的应用服务中,我们随处可见这种理念和代码,主要就是使用了这种模式 ...
- Java JUC工具类--Semaphore
Semaphore 在Semaphore信号量非常适合高并发访问限制,新系统在上线之前,要对系统的访问量进行评估,评估是经过以往的经验.数据.历年的访问量,已经推广力度进行一个合理的评估 当然评估标准 ...
- Java JUC工具类--Master-Worker
Master-Worker Master-Worker模式是常用的并行计算模式.它的核心思想是系统由两类进程协作工作:Master进程和Worker进程 Master负责接收和分配任务,Worker负 ...
- Java JUC工具类--Exchanger
Exchanger Exchanger用于进行线程间的数据交换,它提供一个同步点,在这个同步点,两个线程可以交换彼此的数据 两个线程通过exchange方法交换数据,如果一个线程先执行exchange ...
- Java JUC工具类--CyclicBarrier
CyclicBarrier:栅栏的概念,多线程的进行阻塞,等待某一个临界值条件满足后,同时执行 类比:每个线程代表一个跑步运动员,当运动员都准备好后,才一起出发,只要有一个人没有准备好,大家都等待 p ...
- Java JUC工具类--CountDownLatch
CountDownLatch:用于监听某些初始化操作,并且线程进行阻塞,等初始化执行完毕后,通知主线程继续工作执行 package com.example.core.juc;import java.u ...
- UrlUtils工具类,Java URL工具类,Java URL链接工具类
UrlUtils工具类,Java URL工具类,Java URL链接工具类 >>>>>>>>>>>>>>>&g ...
- Java并发工具类(闭锁CountDownLatch)
并发工具类系列: Java并发工具类(闭锁CountDownLatch) Java并发工具类(栅栏CyclicBarrier) Java并发工具类(信号量Semaphore) 闭锁是一种同步工具类,可 ...
- java日期工具类DateUtil
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. DateUtil类 [java] view plain copy package com.util; ...
最新文章
- 趣图:老手调试多线程,666
- android 多屏幕适配 : 第一部分
- UA PHYS515A 电磁理论IV 时变电磁场理论2 Helmholtz方程与含时的Green函数
- 深度学习tensorflow变量op
- [JavaWeb-JavaScript]JavaScript概念与功能
- jenkins触发构建后一直重复构建
- shell中if条件字符串、数字比对,` `和[ ]区别
- swing JTable学习(七)—TableModelListener
- 【技术直通车】使用FME Extension for ArcGIS读取ArcPad AXF文件
- EditPlus中文版64bit百度网盘下载
- Windows权限维持
- RS/CQI/SINR/RSRP/RSSI都是什么意思?
- java小组口号,小组口号大全
- 科研画图都用什么软件
- camunda工作流开发实战------04 请假流程实例
- 计组作业【题目记录】
- imx6u开发板导入实际应用(一)熟悉开发板,建立调试环境
- PMOS管用作电源开关注意事项
- 大型门户网站的十四大技术
- 牛客华为题库前40题
热门文章
- linux和python的关系_Python、Linux与我的缘分
- xps13 linux 硬盘分区,在xps13上安装ubuntu16.04教程
- LSGO软件技术团队2015~2016学年第十三周(1123~1129)总结
- 第一节:从面向对象思想(oo)开发、接口、抽象类以及二者比较
- 【转】什么是SIEM?
- 【编译原理】学习LUA
- frameset ajax,js控制frameSet示例
- 【Gym - 101612C】【2017-2018NEERC】Consonant Fencity(状压枚举,预处理)
- 【HDU - 1847】Good Luck in CET-4 Everybody! (巴什博奕,PN图或sg函数)
- linux非权限安装bioperl,bioperl的安装