18-其他说明
其他说明
本案例使用 join()
方法来等待程序结束并获取执行结果。同样,也可以使用如下两个版本的 get()
方法来实现它们。
get()
:该版本的get()
方法在ForkJoinTask
执行结束的情况下,返回compute()
方法返回的值,否则等待任务结束。get(long timeout, TimeUnit unit)
:该版本的get()
方法会在任务未返回结果时,等待一段时间。如果任务仍未结束,则返回空值。TimeUnit
类对象是一个枚举类,它包括:DAYS
、HOURS
、MICROSECONDS
、MILLISECONDS
、MINUTES
、NANOSECONDS
和SECONDS
。
get()
方法和 join()
方法有两个主要的不同点。
join()
方法无法被中断,如果你中断了一个调用join()
方法的线程,则该方法将抛出一个InterruptedException
异常。get()
方法会在任务抛出非受检异常时,抛出ExecutionException
,而join()
方法会抛出RuntimeException
。
开发者也可以调用 ForkJoinTask
类中的 completeExceptionally()
方法来获得与本例相同的执行结果,而非抛出异常。具体代码如下所示:
Exception e=new Exception("This task throws an Exception: "+
"Task from "+start+" to "+end);
completeExceptionally(e);