Guava Future
同步、异步、阻塞、非阻塞
同步:所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回。也就是必须一件一件事做,等前一件做完了才能做下一件事。
异步:异步的概念和同步相对。当一个异步过程调用发出后,调用者不能立刻得到结果。实际处理这个调用的部件在完成后,通过状态、通知和回调来通知调用者。
阻塞:阻塞调用是指调用结果返回之前,当前线程会被挂起(线程进入非可执行状态,在这个状态下,cpu不会给线程分配时间片,即线程暂停运行)。函数只有在得到结果之后才会返回。
非阻塞:非阻塞和阻塞的概念相对应,指在不能立刻得到结果之前,该函数不会阻塞当前线程,而会立刻返回。
并发
线程的并发方式一般有两种:
- 异步执行一个任务,不需要返回结果
- 需要异步执行返回结果
第一种,直接往线程池中仍Runnable对象,代码大概如下:
|
|
第二种,一般有两种情况:
- 主线程block到数据
- 设置回调
JDK提供的方式就是主线程block到数据,类似如下代码:
|
|
这种方式缺点很显然,主线程阻塞。而JDK对Future设置回调没有相应的方法,Guava扩展了这一点,引入ListenableFuture,可以对ListenableFuture设置回调。