java并发编程(10)Fork/Join
Fork/Join
JAVA7中出现的Fork/Join,类似于分布式文件系统hadoop的mapreduce思想,就是将任务分割,再分割,直到分割到满足条件
为了便于理解:编程逻辑可以借用 递归的思想,层层递归,直到碰到最终调件,然后层层返回;而在Fork/Join中就是,类似把每个递归的方法,单独的放到一个线程中;
充分利用现代多核处理器,对任务进行并行处理
如:
/**
* 继承RecursiveTask 则每个子任务带返回值
* 继承RecursiveAction 则每个子任务不带返回值
*/
public class FockJoin1 extends RecursiveTask<Integer>{ public static void main(String[] args) throws ExecutionException, InterruptedException {
long l = System.currentTimeMillis();
ForkJoinPool pool = new ForkJoinPool(); //类似线程池,也实现了AbstractExecutorService
FockJoin1 task = new FockJoin1(1,1000000000); //新建任务
Future<Integer> result = pool.submit(task); //将任务提交
System.out.println("result is" + result.get()); //获取结果
System.err.println(System.currentTimeMillis() - l);
} private final Integer index = 5000; //分割任务的基数
private final Integer left;
private final Integer right; public FockJoin1(Integer left, Integer right) {
this.left = left;
this.right = right;
} @Override
protected Integer compute() {
int sum = 0;
if(right - left < index) { //如果任务 小于基数,则直接执行;类似递归的出口
for (int i = left; i <= right; i++) {
sum += i;
}
}else { //任务 大于基数,则分割,类似与二分法,也可以更多
int middle = (right + left) >> 1;
FockJoin1 myf1 = new FockJoin1(left, middle); //二分法左边
FockJoin1 myf2= new FockJoin1(middle+1, right); //二分法右边
myf1.fork(); //继续执行,类似递归
myf2.fork(); //继续执行,类似递归
Integer integer1 = myf1.join(); //等待
Integer integer2 = myf2.join();
sum = integer1 + integer2; //结果合并
}
return sum;
}
}
java并发编程(10)Fork/Join的更多相关文章
- 【java并发系列】Fork/Join任务(转)
		
原文链接 当我们需要执行大量的小任务时,有经验的Java开发人员都会采用线程池来高效执行这些小任务.然而,有一种任务,例如,对超过1000万个元素的数组进行排序,这种任务本身可以并发执行,但如何拆解成 ...
 - JAVA并发工具类---------------(Fork/Join)
		
Fork/Join 分而治之 将一个大任务分成数个小任务执行,然后将这些小人物执行后的结果进行join汇总: (假设:你要计算1到1000的总和,你可以把它分成1-100,101-200,...... ...
 - 多线程高并发编程(8) -- Fork/Join源码分析
		
一.概念 Fork/Join就是将一个大任务分解(fork)成许多个独立的小任务,然后多线程并行去处理这些小任务,每个小任务处理完得到结果再进行合并(join)得到最终的结果. 流程:任务继承Recu ...
 - Java 并发编程 -- Fork/Join 框架
		
概述 Fork/Join 框架是 Java7 提供的一个用于并行执行任务的框架,是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架.下图是网上流传的 Fork Join 的 ...
 - Java并发编程之线程生命周期、守护线程、优先级、关闭和join、sleep、yield、interrupt
		
Java并发编程中,其中一个难点是对线程生命周期的理解,和多种线程控制方法.线程沟通方法的灵活运用.这些方法和概念之间彼此联系紧密,共同构成了Java并发编程基石之一. Java线程的生命周期 Jav ...
 - Java并发编程原理与实战二十一:线程通信wait¬ify&join
		
wait和notify wait和notify可以实现线程之间的通信,当一个线程执行不满足条件时可以调用wait方法将线程置为等待状态,当另一个线程执行到等待线程可以执行的条件时,调用notify可以 ...
 - 【转】Java 并发编程:线程间的协作(wait/notify/sleep/yield/join)
		
一.线程的状态 Java中线程中状态可分为五种:New(新建状态),Runnable(就绪状态),Running(运行状态),Blocked(阻塞状态),Dead(死亡状态). New:新建状态,当线 ...
 - Java 并发编程:线程间的协作(wait/notify/sleep/yield/join)
		
Java并发编程系列: Java 并发编程:核心理论 Java并发编程:Synchronized及其实现原理 Java并发编程:Synchronized底层优化(轻量级锁.偏向锁) Java 并发编程 ...
 - 10、Java并发编程:并发容器之ConcurrentHashMap
		
Java并发编程:并发容器之ConcurrentHashMap(转载) 下面这部分内容转载自: http://www.haogongju.net/art/2350374 JDK5中添加了新的concu ...
 - Java并发编程系列-(9) JDK 8/9/10中的并发
		
9.1 CompletableFuture CompletableFuture是JDK 8中引入的工具类,实现了Future接口,对以往的FutureTask的功能进行了增强. 手动设置完成状态 Co ...
 
随机推荐
- JAVA 字符串编码转换
			
/** * 字符串编码转换的实现方法 * @param str 待转换编码的字符串 * @param newCharset 目标编码 * @return * @throws UnsupportedEn ...
 - .net core webapi 定义多版本与 Swagger 的文档输出
			
前提: 需要nuget 以下两个程序集 Swashbuckle.AspNetCore 我暂时用的是 4.01: Microsoft.AspNetCore.Mvc.Versioning.ApiExp ...
 - RxJava / RxAndroid
			
RxJava 是什么 RxJava 是函数响应式编程框架,它用观察者设计模式. 常用来做异步数据处理,在安卓中用来代替传统的 AsyncTask + Handler 的组合结构. RxJava 架构简 ...
 - java学习笔记—c3p0连接池与元数据分析(42)
			
第一步:导入c3p0包 第二步:在classpath目录下,创建一个c3p0-config.xml <?xml version="1.0" encoding="UT ...
 - 【Oracle 12c】最新CUUG OCP-071考试题库(60题)
			
60.(16-10) choose the best answer: Evaluate the following SQL commands: SQL>CREATE SEQUENCE ord_s ...
 - Java中Io类-File类的构造方法
			
package com.hxzy.IOSer;import java.io.*;public class Demo02 { public static void main(String[] args) ...
 - hadoop1.0.4运行程序出现“Java heap Space”错误
			
根据虾皮博客中教程,成功搭建了一个12台电脑的Hadoop云平台,而且成功运行了软件自带的wordcount程序,处理10M数据. 但是当程序处理40M时候,却出错了.出错提示“Java Heap S ...
 - 看个AV也中招之cve-2010-2553漏洞分析
			
试想:某一天,你的基友给你了一个视频文件,号称是陈老师拍的苍老师的老师题材的最新电影.avi,你满心欢喜,在确定文件格式确实为avi格式后,愉快的脱下裤子准备欣赏,打开后却发现什么也没有,而随后你的基 ...
 - 本机号码认证黑科技:极光(JG)开发者服务推出“极光认证”新产品
			
近日,中国领先的大数据服务商极光(JG)推出全新产品--极光认证JVerification.极光认证是极光针对APP用户注册登陆,二次安全验证等身份验证场景打造的一款本机号码认证SDK,验证用户提供的 ...
 - GCD 使用若干注意事项
			
这篇文章写的是看完 WWDC 17 - Modernizing GCD Usage 之后的笔记. 一.Parallelism & Concurrency Parallelism 指的是在多个 ...