当前位置:嗨网首页>书籍在线阅读

18-其他说明

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

其他说明

本案例使用 join() 方法来等待程序结束并获取执行结果。同样,也可以使用如下两个版本的 get() 方法来实现它们。

  • get() :该版本的 get() 方法在 ForkJoinTask 执行结束的情况下,返回 compute() 方法返回的值,否则等待任务结束。
  • get(long timeout, TimeUnit unit) :该版本的 get() 方法会在任务未返回结果时,等待一段时间。如果任务仍未结束,则返回空值。 TimeUnit 类对象是一个枚举类,它包括: DAYSHOURSMICROSECONDSMILLISECONDSMINUTESNANOSECONDSSECONDS

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