zoukankan      html  css  js  c++  java
  • Atitit ForkJoinTask的使用以及与futuretask的区别 1.1. Forkjoin原理图 1 1.2. Fork/Join使用两个类完成以上两件事情:ForkJoinTask

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

     

     

    1.1. Forkjoin原理图 1

    1.2. Fork/Join使用两个类完成以上两件事情:ForkJoinTask类中之重要的两个方法forkjoin 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类中之重要的两个方法forkjoin

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

        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()方法来检查任务是否已经抛出异常或已经被取消了,并且可以通过ForkJoinTaskgetException方法获取异常

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

     

    1.7. 参考资料

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

     

  • 相关阅读:
    instance
    iptables
    centos系统准备
    Leecode no.236 二叉树的最近公共祖先
    Leecode no.235 二叉搜索树的最近公共祖先
    leecode no.98 验证二叉搜索树
    leecode no.109 有序链表转换二叉搜索树
    leecode no.113 路径总和 II
    Leecode no.112 路径总和
    Leecode no.111 二叉树的最小深度
  • 原文地址:https://www.cnblogs.com/attilax/p/15197670.html
Copyright © 2011-2022 走看看