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的異常處理。