00:00
接下来呢,我们就来看一下compliible future该如何使用好,我们还是在我们的这个测试类里边,我们先把我们以前的这个我们去掉们以前这个呢,比如是我们这个测试线程的,我就放在这,我们再来新创建一个我们这个慢方法,好,我们在这呢来测试comp future,那想要测试compliible future,我们先来看第一步,我们先来看如何使用它创建一个异步对象,Compible future里边呢,我们提供了这么四个方法,这四个方法呢,起名都是这样的,叫run anthnic run anthnic和supply anthnic supply anthnic,首先呢,Asy nc,那都是我们以异步的方式来运行我们指定的方法,它们呢都可以接收传入,首先来看run s anic,它呢是接收传入我们的runable,那runnerable最大特点就是我们无需返回值,所以呢,我们看以run开头的所有方法返回的都是compli future。
01:00
Word都是空类型的,那就代表没返回值,而且呢,我们还可以使用第二个方法,本来呢,默认我们的这个异步任务是在默认的线程池里边执行的,但是我们也可以给他指定在哪个线程池里进行执行。所以后边还能传入我们自定义的线程池对象,那线程池呢,我们可以来看一下,那们之前创建的线程池是excu service,它其实就是excuor,也是我们后边能传这个excuor自定义的线程池,而supply方法它呢,还是传入我们一个要执行的异步任务,只不过我们这个异步任务呢,是有返回值的,所以最终它返回的compible future它都是有返回值的。好,我们先来用它,我们来做一个测试,好,那先来第一步来创建我们的异步任务,使用compliable future,那就叫compliable future,点一个叫run。Asy nc,我们以后呢,都用第二个方法,我们用我们指定的这个线程池,那我们业务里边呢,比如我们之前自己创建了一个这个线程池,我们以后所有的异步任务,即使是他开的异步任务,还是我们自己run暖宝之类的异步任务,你都提交给这个线程池,好假设呢,有一个异步任务,既然传reable,我就直接写一个拉姆达表达式,好,函数式接口我就放在这,然后呢,我们把我们的所有任务都放在这个线程池里边,我们就把它的excu拿过来传入我们指定的这个线程池。
02:31
来,我们异步任务的内容呢,我们就放在这儿,我们把这个内容我直接复制过来,CTRLC,我们还是这一块的内容,这相当于我们使用它启动了一个异步任务,然后呢,用我们自己的线程池,它会返回一个completeable future,这个结果好,我们还是呢,先来打印我们整个方法的开始和方法的结束,来看一下我们的最终效果,方法的开始,方法的结束。好,我们先来测试一下我们的这个异步任务能不能正确运行,我们先来启动一下,诶我们发现呢,我们这个慢start end,包括我们这个异步任务也在运行,已经运行完成了,当然我们这个程序呢,没有中断,没有中断的原因是因为我们创建了一个线程池,这个线程池呢,在后台一直有,所以相当于阻塞住了,但是我们这个测试已经成功运行了,什么时候线程池销毁了,我们这个肯定程序就停了,好我们自己呢,把它停一下,那我么相当于用自己的线程池执行了我们这个异步任务,那使用run anthnic的方式,那同样的,如果我们使用supply,我们来看一下是什么效果,我们把这个注掉,我们还是compli future,点一个我们原来有run anic,同样它它还有一个叫supply anic,这个supply呢,一样传入一个叫lier。
03:50
和我们的这个线程池,我们先把这个线程池放进来,然后呢,我们来看它里边呢,要求我们传一个这个,这个还是一个函数式接口,但这个呢,我们发现它呢,就会有一个返回值,相当于呢,我们会传一个有返回值的我们这个异步任务,那这个任务呢,我还是最快的方式,我来写拉姆达表达式走,我们没有入参,因为我们的这个supply我们不接受入残,只有我们的返回值只有出残,所以呢,那么这是一个空入残,然后我们出残给它来返回,把这一块的计算拿过来,CTRLC好,我们来CTRLV好,我们来看一下效果,那么最终的这个I1返回return。
04:34
哎,我们这个异步任务呢,肯定也能得到执行,我们来测试一下走,那我们发现这一块呢,就执行成功了,但如果我们想要获取这个返回值,怎么获取呢?我们看一下我们这个异步任务啊,只要我们启动一个异步任务,都会返回一个completeliliable future,那这个future里边呢,就有一个这个我们以前用过,们以前呢用过这个future task,我们说封装cornerable的时候,我们是用它封装的,那它我们点进来,它就是一个future,所以呢,想要获取结果,那我们就是调用get方法能获取到,我们直接拿到future的,点一个get方法,它呢就能获取到我们的结果,我把这个get方法放在最外边。
05:20
好,把这个呢,来打印一下,这一块有异常,我们给它抛出去,我们现在来测试一下,我们来重新启动。哎,我们发现呢,拿到了结果是五没问题,所以呢,这是我们说comfortable future。可以来启动一个异步任务,它最终呢还返回了一个complete future,那有了它的好处就是只要我们返回的是future对象以后呢,它就可以用它的其他的编排方法,比如then接下来干什么,Exceptionally出异常了干什么等等。那么下节课再来看一下其他的这几个方法,好,这是我们说的使用它,那第一个先创建启动我们的异步任务,一个是supply,有返回值的,一个是run,没返回值的。
我来说两句