来自: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<Integer> { 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 < ) {
if (( > start) && ( < end)) {
System.out.println("paochu yichang " + start + " to " + end);
throw new RuntimeException("task from " + start + " to " + end);
}
try {
TimeUnit.SECONDS.sleep();
}catch (Exception e) {
e.printStackTrace();
}
}else {
int mid = (start + end) /;
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 ;
}
}

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[]; Task task = new Task(array, , ); ForkJoinPool forkJoinPool = new ForkJoinPool();
forkJoinPool.execute(task); forkJoinPool.shutdown(); try {
forkJoinPool.awaitTermination(, 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());
} }

最新文章

  1. iOS delegate
  2. resultMap 映射
  3. sharepoint webpart
  4. [deviceone开发]-HeaderView和FooterView的示例
  5. UIButton、UILabel、UITextField 初学者需要了解的基本定义和常用设置
  6. paper 85:机器统计学习方法——CART, Bagging, Random Forest, Boosting
  7. hdu1017
  8. Android软键盘调用及隐藏,以及获得点击软键盘输入的字母信息
  9. 利用bat批量执行脚本文件
  10. Android中怎么去除标题栏详解
  11. threading多线程总结
  12. 树的平衡 AVL Tree
  13. ifeve.com 南方《JVM 性能调优实战之:使用阿里开源工具 TProfiler 在海量业务代码中精确定位性能代码》
  14. jquery倒计时按钮常用于验证码倒计时
  15. C# 实现Jwtbearer Authentication
  16. ASP.NET 在OnClientClick中js方法直接调用Eval绑定字段的数据
  17. python-原型模式
  18. JAVA开发总结
  19. MySQL课堂练习 20162315
  20. 【BZOJ4140】共点圆加强版(二进制分组)

热门文章

  1. Codeforces735B Urbanization 2016-12-13 11:58 114人阅读 评论(0) 收藏
  2. EBS xml publisher中文乱码
  3. navigationController背景图,文字,事件定义
  4. .net mvc使用FlexPaper插件实现在线预览PDF,EXCEL,WORD的方法
  5. SqlAlchemy操作(二)
  6. poj1953 World Cup Noise
  7. elasticsearch geo_point 地理位置过滤 按经度排序
  8. Python小白学习之路(十九)—【文件操作步骤】【文件操作模式】
  9. 【bzoj5210】最大连通子块和 动态dp
  10. chromedriver与google版本的对应