Fork/Join框架:在必要的情况下,将一个大任务,进行拆分(fork) 成若干个子任务(拆到不能再拆,这里就是指我们制定的拆分的临界值),再将一个个小任务的结果进行join汇总。

采用juc包的fork/join框架

public class ForkJoinWork extends RecursiveTask<Long> {

    private Long start;//起始值
private Long end;//结束值
public static final Long critical = 100000L;//临界值 public ForkJoinWork(Long start, Long end) {
this.start = start;
this.end = end;
} @Override
protected Long compute() {
//判断是否是拆分完毕
Long lenth = end - start;
if(lenth<=critical){
//如果拆分完毕就相加
Long sum = 0L;
for (Long i = start;i<=end;i++){
sum += i;
}
return sum;
}else {
//没有拆分完毕就开始拆分
Long middle = (end + start)/;//计算的两个值的中间值
ForkJoinWork right = new ForkJoinWork(start,middle);
right.fork();//拆分,并压入线程队列
ForkJoinWork left = new ForkJoinWork(middle+,end);
left.fork();//拆分,并压入线程队列 //合并
return right.join() + left.join();
}
}
}
public class ForkJoinWorkTest {

    public static void main(String[] args) {
test();
test2();
test3();
} public static void test() {
//ForkJoin实现
long l = System.currentTimeMillis();
ForkJoinPool forkJoinPool = new ForkJoinPool();//实现ForkJoin 就必须有ForkJoinPool的支持
ForkJoinTask<Long> task = new ForkJoinWork(0L,1000000000L);//参数为起始值与结束值
Long invoke = forkJoinPool.invoke(task);
long l1 = System.currentTimeMillis();
System.out.println("ForkJoin实现 result = " + invoke+" time: " + (l1-l));
//result = 500000000500000000 time: 7422
} public static void test2(){
//普通线程实现
Long x = 0L;
Long y = 1000000000L;
long l = System.currentTimeMillis();
for (Long i = 0L; i <= y; i++) {
x+=i;
}
long l1 = System.currentTimeMillis();
System.out.println("单线程 result = " + x+" time: " + (l1-l));
//result = 500000000500000000 time: 8274
} public static void test3(){
//Java 8 并行流的实现
long l = System.currentTimeMillis();
long reduce = LongStream.rangeClosed(, 1000000000L).parallel().reduce(, Long::sum);
long l1 = System.currentTimeMillis();
System.out.println("Java8并行流 result = " + reduce+" time: " + (l1-l));
//result = 500000000500000000 time: 855
} }

最新文章

  1. 转OSGchina中,array老大的名词解释
  2. php ob_start()、ob_end_flush和ob_end_clean()多级缓冲
  3. [html]三列居中自动伸缩的结构
  4. codeforces 338(Div 2) B. Longtail Hedgehog 解题报告
  5. Linux 注意
  6. UNDERSTANDING POSTGRESQL.CONF: CHECKPOINT_SEGMENTS, CHECKPOINT_TIMEOUT, CHECKPOINT_WARNING
  7. .NET 集合操作性能
  8. codeforces 580D Kefa and Dishes(状压dp)
  9. Surrounded Regions——LeetCode
  10. ASP.NET之电子商务系统开发-3(订单)
  11. ASP.NET Zero--10.一个例子(3)商品分类管理-新建
  12. 编译Uboot时提示error while loading shared libraries: libz.so.1: cannot open shared object file: No such file or directory
  13. [HDUOJ1312]Red And Black (经典的DFS)
  14. SQL SERVER 删除前判断指定的表或者存储过程是否存在
  15. 《代码整洁之道》(Clean Code)- 读书笔记
  16. 使用Python操作MongoDB
  17. 使用lambda表达式对相同属性的实体进行合并
  18. 应用AI芯片加速 Hadoop 3.0 纠删码的计算性能
  19. C#UDP广域网,局域网通信-原理分析
  20. mysql学习之完整的select语句

热门文章

  1. Java向服务器上传图片
  2. SAP 公司间STO场景中外向交货单过账后自动触发内向交货单功能的实现
  3. maven 学习---Maven Web应用
  4. Centos7安装和配置Tomcat8
  5. sqlserver 数据库 创建不同文件组的数据库
  6. 商学院教授点评亚马逊、苹果、Facebook和谷歌的商业策略:3星|《互联网四大:亚马逊、苹果、脸书和谷歌的隐藏基因》
  7. Dev-C++之调试
  8. flask 基础2
  9. robotframework-post request请求携带上一个请求返回的cookie
  10. 修改woocommerce列表产品显示数量