Atitit ForkJoinTask的使用以及与futuretask的区别

1.1. Forkjoin原理图 1

1.2. Fork/Join使用两个类完成以上两件事情:ForkJoinTask类中之重要的两个方法fork和join 2

1.3.  ForkJoinTask实现了Future接口,可以按照Future接口的方式来使用 2

1.4. Fj框架架构图 2

1.5. Code 2

1.6. 异常处理:  4

1.7. 参考资料 4

1.1. Forkjoin原理图

1.2. Fork/Join使用两个类完成以上两件事情:ForkJoinTask类中之重要的两个方法fork和join

· ForkJoinTask: 我们要使用ForkJoin框架,必须首先创建一个ForkJoin任务。它提供在任务中执行fork()和join的操作机制,ForkJoinTask实现了Future接口,可以按照Future接口的方式来使用。在ForkJoinTask类中之重要的两个方法fork和join。fork方法用以一部方式启动任务的执行,join方法则等待任务完成并返回指向结果。在创建自己的任务是,最好不要直接继承自ForkJoinTask类,而要继承自ForkJoinTask类的子类RecurisiveTask或RecurisiveAction类

1. RecursiveAction,用于没有返回结果的任务

2. RecursiveTask,用于有返回值的任务

1.3.  ForkJoinTask实现了Future接口,可以按照Future接口的方式来使用

1.4. Fj框架架构图

1.5. Code

package com.attilax.util;

import java.util.concurrent.ExecutionException;

import java.util.concurrent.ForkJoinTask;

import java.util.concurrent.RecursiveTask;

import java.util.concurrent.TimeUnit;

import java.util.concurrent.TimeoutException;

public class ForkJoinTasktest  {

public static void main(String[] args) {

System.out.println("--ForkJoinTasktest ");

ForkJoinTask<Object> fjtask=new RecursiveTask<Object>(){

@Override

protected Object compute() {

System.out.println("--task1");

return null;

}} ;

//fjtask.fork(); //exec

ForkJoinTask<Object> fjtask2=new RecursiveTask<Object>(){

@Override

protected Object compute() {

System.out.println("--task2");

return null;

}} ;

fjtask2.fork();

fjtask.join();

System.out.println("--main ");

}

}

1.6. 异常处理: 

ForkJoinTask在执行的时候可能会抛出异常,但是没办法在主线程里直接捕获异常,所以ForkJoinTask提供了isCompletedAbnormally()方法来检查任务是否已经抛出异常或已经被取消了,并且可以通过ForkJoinTask的getException方法获取异常.

getException方法返回Throwable对象,如果任务被取消了则返回CancellationException。如果任务没有完成或者没有抛出异常则返回null。

1.7. 参考资料

java-forkjoin框架的使用 - bronk - 博客园.html

Atitit ForkJoinTask的使用以及与futuretask的区别 1.1. Forkjoin原理图 1 1.2. Fork/Join使用两个类完成以上两件事情:ForkJoinTask相关推荐

  1. Java中的Runnable、Callable、Future、FutureTask的区别与示例

    原文地址:http://blog.csdn.net/bboyfeiyu/article/details/24851847 --------------------------------------- ...

  2. future和futureTask 的区别

    future和futureTask 的区别: future 是一个接口,没有办法实例化,只能通过线程池的submit方法得到, 如上图所示,线程池执行submit方法可以得到返回值是Future< ...

  3. Future和FutureTask的区别

    先看下Future.FutureTask相关类的关系 Future只是一个接口,FutureTask是实现了RunnableFuture Future接口可以实现的功能 Future呈现的是异步计算的 ...

  4. Atitit s2018 s4 doc list dvchomepc dvccompc.docx .docx \s2018 s4 doc compc dtS44 \s2018 s4 doc dvc

    Atitit s2018 s4 doc list dvchomepc dvccompc.docx .docx \s2018 s4 doc compc dtS44 \s2018 s4 doc dvcCo ...

  5. Java 7 并发编程指南

    原文是发表在并发编程网上翻译后的 <Java 7 并发编程指南>,这里对其中的目录做个更加详细的描述,并且写出了重点说明,方便日后快速查阅.建议仔细查看每节的代码实现,非常具有参考价值.可 ...

  6. java fork_浅谈Java的Fork/Join并发框架

    前几天有写到整合并发结果的文章,于是联想到了Fork/Join.因为在我看来整合并发结果其实就是Fork/Join中的Join步骤.所以今天我就把自己对Fork/Join一些浅显的理解记录下来. 1. ...

  7. java-forkjoin框架的使用

    ForkJoin是Java7提供的原生多线程并行处理框架,其基本思想是将大任务分割成小任务,最后将小任务聚合起来得到结果.fork是分解的意思, join是收集的意思. 它非常类似于HADOOP提供的 ...

  8. 浅谈Java的Fork/Join并发框架

    1. Fork/Join是什么 Oracle的官方给出的定义是:Fork/Join框架是一个实现了ExecutorService接口的多线程处理器.它可以把一个大的任务划分为若干个小的任务并发执行,充 ...

  9. 分支合并 Fork-Join 框架

    一.什么是 Fork-Join Fork/Join框架是Java7提供了的一个用于并行执行任务的框架,是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架,这种开发方法也叫分 ...

  10. 叉叉框架_叉/连接框架

    叉叉框架 本文是我们名为Java Concurrency Essentials的学院课程的一部分. 在本课程中,您将深入探讨并发的魔力. 将向您介绍并发和并发代码的基础知识,并学习诸如原子性,同步和线 ...

最新文章

  1. 节省磁盘空间的新一代包管理工具PNPM
  2. (Java集合框架)Map集合
  3. Unity3d 控制物体移动、旋转、缩放
  4. oracle ndv,CBO_ORACLE
  5. 分享Silverlight/WPF/Windows Phone/HTML5一周学习导读(1月9日-1月15日)
  6. GDI+ is F**king unbelievable
  7. [转]瀑布流布局浅析
  8. java mp4转码 h264_10分钟学会Jave视频转码avi--gt;mp4(h264编码格式)!_Java_七九推...
  9. 计算机在机械设制造中的应用实例,三维设计软件和技术在机械设计中的应用
  10. 情人节送什么礼物给女友比较好、这几款就够了
  11. 计算股票收盘价的月日均值 matplotlib绘图
  12. 潘通色号与rgb转换_中秋福利!手把手教你用Python做一只口红色号识别器,秒变李佳琦...
  13. CAP原理与传统的ACID
  14. 在jsp引入bootstrap
  15. 0 基础怎样开始学习做网站 (Ruby on Rails)?
  16. 【最新版】愚人节整人软件大全
  17. Nwafu-OJ-1437 Problem h C语言实习题六——6.进制转换函数设计
  18. 遇到不认识的字怎么办
  19. java常用的分隔符_*文件操作类1(基本操作)分隔符的使用
  20. Qt在window系统下打印小票——————附带完整代码

热门文章

  1. 2. COM编程——什么是接口
  2. 数据结构详解之栈和队列
  3. 巴西发生矿坝决堤事故 外媒:90名受困者已救出
  4. idea 正则表达式替换
  5. Apache 代理nodejs[未测试]
  6. 10分钟带你光速入门运维工具之-Puppet
  7. 拒绝瞎忙,高效的学习与工作经验谈
  8. 【android-音视频】listview中播放音频,实现音频时长的倒计时,暂停,切换。
  9. IE9 BUG overflow :auto 底部空白解决方案
  10. 连发12款软硬件产品 瑞星领跑企业级安全市场