00:00
好,我们接下来继续,前面呢,我们可以使用future.get拿到我们这个结果,当然我们希望呢,如果在我们这个异步任务,我们这是一个第一个异步任务,他执行完成,成功了以后,我们还想干一件事情,我们可以有两种方式,第一个等他成功,在下边呢自己来写要做什么,叉叉叉自己来在这写一堆,但是呢,我们complete future还提供了我们的另外一种异步编排功能,来看一下,我们可以在做完成时回调。就是呢,他有这个问company方法,就是当我们这个成功以后,我们可以指定我们回调什么。那这个问companyly呢,有这么几种,大家来看一下,首先问company有带有了asy nc后缀的,带这个后缀的意思就是呢,我们前一个成功以后,我们接下来要干一件事情,那这个事情呢,还是以一个异步的方式交给我们线程池,让线程池呢自己整一个线程再来处理,而不带asy nc的方式,那就是呢。
01:05
那要干的这个活儿就跟上一个人用同一个线程就行了,好我们来看一下,当我们这个成功以后,我们希望呢,这一块运行成功以后,想要干一件活,好我把这一块呢删掉,这个future get跟以前一样,都是在线阻塞等结果,那现在呢,它完了以后,我们希望干一件事,好,那我们接下来就应该继续可以链式调用,点一个问company。成功以后干什么?我们来看它,它呢传入的是一个consumer consumer呢有两个参数,一个是T,一个是U,那这两个参数都是什么?我们先来在这儿加上,因为这个问康里,他接收两个参数,他说一个是T,一个是U,我们就把这两个参数拿过来,我们想要干一件事情,比如我们就在这儿来打印。一步任务成功完成了,那完成呢,我想要获取结果怎么办?所以我们这个问卡里里边的这两个参数,我们可以看到这两个参数呢,前边是一个integer,后边是一个throwable,相当于呢,前边是结果,后边是异常,所以呢,我们应该是这样的,前边是result结果,然后呢,后边是异常,Exception异常。
02:23
所以我们在这呢,就可以来打印成功完成了,我们结果是什么?结果是结果是结果是什么,我们可以打印到,然后呢,如果有异常,我们还可以打印异常,异常是异常是是吗?好,我们在这来打印一下exception。相当于我们使用comp future给我们提供的问company方法。我们可以在成功以后做一件事,好,我们在这儿来测试一下,走。好,我们发现呢,结果是五异常,是呢没问题,那如果出现异常了怎么办?比如我们变成一个十除零,我们这个异步任务呢,相当于有异常了,来看一下效果走,那我发现结果呢是那异常呢就有异常原因,那么这个by zero数学运算异常,所以呢,这是我们说的问company,当然出现异常以后,如果我们想详细处理,我们还有一个方法叫exceptionally们直接可以拿到出现的这个异常来做一件事情,所以我们在这来可以继续来链式处理,问company,这就是我们执行成功以后,然后呢,如果出现异常以后,我们叫exceptionally。
03:38
点进来,它需要传入一个方式,这个方式呢,接收一个T,返回一个R,所以呢,我们会发现。这个异常的处理比问company,虽然问company呢能感知到异常,但是我们这个exception,我们现在可以接受一个T返回一个R,那这个T别的不说了,这肯定是我们的抛出来的异常。
04:01
好,我们直接让它提示好我们得到这个,然后呢,它要我们返回一个R,那R我们返回什么呢?比如我返回一个十,相当于如果我们这个结果出现异常以后,我们就给它一个默认返回,它就是比问companyly多了一个,还可以指定默认返回问company我们来说一下,虽然能得到。异常信息,但是但是没法修改,我们这个返回数据,相当于呢,它只是一个监听器,类似于监听器感知到成功执行了,还是异常执行了,他在这干事,但是呢,没法修改结果,而我们这个exceptionally它呢就可以可以感知异常同时返回。默认值感知异常同时返回。
05:01
默认值,比如我们这个异常出现了以后,我们给他返回什么好,我们返回十,所以呢,我们想要获取结果,那最终得到的结果肯定就是十,我们在这来打印一下。来看一下现在的效果走。好,我们发现呢,我们这一块确实打印的事实,这是因为我们加了异常处理逻辑exceptionally,那这就是我们说的compli future来完成成功的回调使用。问company想要感知异常并修改返回结果,可以使用exceptionally。
我来说两句