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);