CompletableFutures是对Future的扩展和增强,CompltableFuture实现Future接口,在此基础上做了丰富扩展,使用起来极其方便简单,同时CompletableFuture实现了对任务的编排的能力。
使用ComplateableFuture时,如果不提供线程池参数,那么默认使用的是ForkJoinPool
而ForkJoinPool使用的是守护线程,当main线程结束时,守护线程会跟着一起结束,那么ComplateableFuture的异步操作也就不存在了。
下面通过Demo对几个常用方法进行简单讲解
与runAsync类似,有返回值,是ComplateableFuture对象,且入参是supplier,而runAsync入参是runnable
tip:调用后可以使用get方法获取返回值,但是最好设置超时时间,不然会在get时一直阻塞。
与thenApply类似,但thenApply无法指定线程池。
与thenAccept类似,区别是无入参无返回参数
用法与thenAccept类似,有返回参数
用来捕获异常,类似catch,但是用handle更好更灵活,因为handle既可以捕获异常,也可以捕获前置CompletableFuture的返回值
与anyOf相似,一个是参数中的任务都执行完再执行后续操作,一个是只需参数中的任意一个执行完。