Java Future模式简介

Future模式是Java多线程常用的模式,而且JDK也内置对Future模式的支持,比如在java.util.concurrent包下的FutureTask类。其核心思想在于:发出请求后,可以立即返回对象,但是这个对象实际上是个假对象,并不可立即使用,但是我们可以在干点别的事情后,就可以使用这个假对象获取结果了。这是为什么呢?因为在返回假对象的时候,偷偷的开启了一个线程去请求真正的结果数据。那么下面,我们来模拟实现下Future模式。


代码实现与分析


wKiom1hBiN2QQwJyAABNwUkohec540.png

主流程是:客户端类发出请求返回,做一些其他工作后,在获取请求的结果数据。


wKioL1hBiSvTqru3AABB2oQ8_tI599.png


通过上图,已经清晰的看到,在获取数据时,立即返回,同时开启了一个线程。


wKioL1hBiauQnAdEAABZpIHVeL4815.png


这里需要特别注意的是使用到了wait/notify,那么为什么使用它们呢?

既然我们在请求后立即返回了一个“假对象”,如果立即调用“假对象”的方法获取结果数据,该怎么办呢?我们希望在偷偷开启的线程任务结束后,“假对象”才可以调用方法返回结果数据。因此,利用wait先阻塞住“假对象”的结果返回,当线程完成了结果数据的请求后notify通知下“假对象”可以提供结果数据了。


wKiom1hBi1iCZ4xVAABR4JPR7X0939.png


wKioL1hBi33ht9oTAAAOkmcFWLg764.png


运行结果验证:


wKiom1hBi62zaD2EAAAn2fCy8DQ577.png