博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java-jdk7-forkjoin异常返回
阅读量:5812 次
发布时间:2019-06-18

本文共 2562 字,大约阅读时间需要 8 分钟。

来自:http://ifeve.com/fork-join-5/

在Java中有两种异常:

  • 已检查异常(Checked exceptions):这些异常必须在一个方法的throws从句中指定或在内部捕捉它们。比如:IOException或ClassNotFoundException。
  • 未检查异常(Unchecked exceptions):这些异常不必指定或捕捉。比如:NumberFormatException。

在ForkJoinTask类的compute()方法中,你不能抛出任何已检查异常,因为在这个方法的实现中,它没有包含任何抛出(异常)声明。你必须包含必要的代码来处理异常。但是,你可以抛出(或者它可以被任何方法或使用内部方法的对象抛出)一个未检查异常。ForkJoinTask和ForkJoinPool类的行为与你可能的期望不同。程序不会结束执行,并且你将不会在控制台看到任何关于异常的信息。它只是被吞没,好像它没抛出(异常)。你可以使用ForkJoinTask类的一些方法,得知一个任务是否抛出异常及其异常种类。在这个指南中,你将学习如何获取这些信息。

task: 

package com.wenbronk.forkjoin.exception;import java.util.concurrent.RecursiveTask;import java.util.concurrent.TimeUnit;/** * forkjoin 中抛出异常的处理 * Created by wenbronk on 2017/7/27. */public class Task extends RecursiveTask
{ private int array[]; private int start, end; public Task(int[] array, int start, int end) { this.array = array; this.start = start; this.end = end; } @Override protected Integer compute() { System.out.printf("task: start from %d to %d \n", start, end); if (end - start < 10) { if ((3 > start) && (3 < end)) { System.out.println("paochu yichang " + start + " to " + end); throw new RuntimeException("task from " + start + " to " + end); } try { TimeUnit.SECONDS.sleep(1); }catch (Exception e) { e.printStackTrace(); } }else { int mid = (start + end) /2; Task task1 = new Task(array, start, mid); Task task2 = new Task(array, mid, end); invokeAll(task1, task2); } System.out.printf("task: end from %d to %d \n", start, end); return 0; }}

main: 

package com.wenbronk.forkjoin.exception;import java.util.concurrent.ForkJoinPool;import java.util.concurrent.TimeUnit;/** * Created by wenbronk on 2017/7/27. */public class ExceptionMain {    public static void main(String[] args) {        int[] array = new int[100];        Task task = new Task(array, 0, 100);        ForkJoinPool forkJoinPool = new ForkJoinPool();        forkJoinPool.execute(task);        forkJoinPool.shutdown();        try {            forkJoinPool.awaitTermination(1, TimeUnit.DAYS);        } catch (InterruptedException e) {            e.printStackTrace();        }        if (task.isCompletedAbnormally()) {            System.out.println("main::: an exception has occured \n");            System.out.printf("main:::: %s \n", task.getException());        }        System.out.printf("main: result: %d", task.join());    }}

 

转载地址:http://hlvbx.baihongyu.com/

你可能感兴趣的文章
ISA2006实战系列之二:实战ISA三种客户端部署方案(下)
查看>>
Linux后门入侵检测工具,附bash漏洞最终解决方法
查看>>
ASA5585-S20测试方案
查看>>
利用for循环打印实心棱形和空心棱形
查看>>
路由器发布服务器
查看>>
实现跨交换机VLAN间的通信
查看>>
oracle import & export 操作相关脚本
查看>>
LVS集群的体系结构,构建强壮的体系结构里负载均衡层、真实服务器层、后端共享存储层都是相辅相成...
查看>>
VTK读取raw格式的数据
查看>>
java泛型
查看>>
J2EE搭建之十一 如何设置start-on-load
查看>>
像这样的高额授权费在业界并不常见
查看>>
我的友情链接
查看>>
推荐几本书
查看>>
批量实现多台服务器之间ssh无密码登录的相互信任关系
查看>>
思科ACL详解
查看>>
mysql自动备份脚本及异地定时FTP
查看>>
使用Django开发一个图书管理系统------02-需求分析设计
查看>>
PMP知识要点(第六章)
查看>>
设计模式-Composite Pattern
查看>>