异步编程之CompleTableFuture
一、前期准备(基础讲解)
1、 什么是异步?
所谓异步调用其实就是实现一个可无需等待被调用函数的返回值而让操作继续运行的方法。在 Java 语言中,简单的讲就是另启一个线程来完成调用中的部分计算,使调用继续运行或返回,而不需要等待计算结果。但调用者仍需要取线程的计算结果。
2、使用前注意点介绍
在并发时代,我们常用多线程来进行异步编程,但是多线程有一个缺点,就是不容易获取线程执行后的值,尽管用一些奇招可以获取,但是这已经远离了我们的初衷。java 1.5
提供了一个future
接口,可以对线程中的执行状态进行cancle
,判断isCancelled
,isDone
。利用多线程来获取异步执行后的值,但是也有着诸多的缺点,比如
1.future
没有异常处理程序,通常在future
中异常后线程会一直阻塞在内部,造成异常抛不出,线程也退出不了
future
中的get
超时方法可以解决这个问题,但是若是方法还没有执行完,超时时间也过,又会出现超时异常的问题
V get(long timeout, TimeUnit unit)