java-forkjoin异常返回

此页面是否是列表页或首页?未找到合适正文内容。

java-forkjoin异常返回

标签:logevedextimestylecutsecondinterruptprintf

来自: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>*/
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 < 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

作者: liuzhihao

为您推荐

返回顶部