15-在任务中抛出异常
5.5 在任务中抛出异常
Java中有如下两种异常。
- 受检异常: 这些异常必须在方法声明中抛出或在方法内部捕获,比如
IOException
和ClassNotFoundException
。 - 未受检异常: 这些异常不必声明或是捕获,例如
NumberFormatException
。
一方面,在 ForkJoinTask
类的 compute()
方法中,不能抛出任何受检异常,因为该方法的实现声明不包含抛出异常,所以必须在内部实现处理异常的功能;另一方面,可以抛出一个未受检异常。 ForkJoinTask
类和 ForkJoinPool
类的行为可能和读者所期望的不同,程序不会结束执行,并且不会在控制台输出任何信息,异常就像从未抛出一样,而是直接被程序“吞食”了。只有当在初始任务中调用 get()
方法时,任务才会抛出异常。不过,开发者可以使用 ForkJoinTask
类中的部分方法来获知任务是否已抛出异常和抛出异常的类型。本节将介绍获取这些信息的方法。