Future模式
- Future模式是多线程开发中的常见的一种设计模式,核心思想是异步调用。当我们调用一个函数方法时,如果函数执行的很慢,需要等待。很多情况上,我们不需要立刻获取结果,而是让函数方法先返回,后台去计算结果,等到需要使用时,再去尝试获取数据。
Future接口
|
|
FutureTask
- FutureTask类是Future 的一个实现,并实现了RunnableFuture
- 可通过Excutor(线程池) 来执行,也可传递给Thread对象执行。
- 如果在主线程中需要执行比较耗时的操作时,但又不想阻塞主线程时,可以把这些作业交给Future对象在后台完成,当主线程将来需要时,就可以通过Future对象获得后台作业的计算结果或者执行状态。
- Executor框架利用FutureTask来完成异步任务,并可以用来进行任何潜在的耗时的计算。一般FutureTask多用于耗时的计算,主线程可以在完成自己的任务后,再去获取结果。
- FutureTask类既可以使用new Thread(Runnable r)放到一个新线程中跑,也可以使用ExecutorService.submit(Runnable r)放到线程池中跑,而且两种方式都可以获取返回结果,但实质是一样的,即如果要有返回结果那么构造函数一定要注入一个Callable对象。
|
|
应用实例
Future模式的参与者:
参与者 | 作用 |
---|---|
Main | 系统启动,调用Client发出请求 |
Client | 返回Data对象,立即返回FutureData,并开启ClientThread线程装配RealData |
FutureData | 返回数据的接口 |
RealData | 真实数据 |
Date接口
|
|
FutureData
|
|
RealData
|
|
client
|
|