ForkJoinTask类提供了以下两个方法:
public final boolean isCompletedAbnormally() { return status < NORMAL; }以上方法其实就是做个任务状态的判断,如果任务抛出了异常,或者被取消,则返回true。
public final Throwable getException() { int s = status & DONE_MASK; return ((s >= NORMAL) ? null : (s == CANCELLED) ? new CancellationException() : getThrowableException()); }以上方法其实也是做任务状态的比较,然后决定是返回null,还是返回异常,该方法可以得到返回值。
通过以上两个方法的结合,就可以做到对ForkJoinTask的异常处理,代码demo如下:
ForkJoinTask task;//ForkJoinTask是一个接口,不能是实例化,这里默认task是ForkJoinTask子类的实例对象 //如果该方法返回true,说明任务执行过程抛出了异常或者已经被取消 if(task.isCompletedAbnormally){ //返回Throwable对象,如果任务被取消,返回CancellationException异常,如果任务没出现异常或者没完成,则返回null System.out.println(task.getException()); }总结
通过isCompletedAbnormally()方法配合getException()方法就能够实现ForkJoinTask的异常处理。