多线程设计模式之Future模式
在JDK中实现线程同步等待闭环(FutureTask/Future)中已经涉及到了Future模式,相对与多线程设计模式之Worker Thread模式有何异同呢?在多线程设计模式之Worker Thread模式中client和worker之间没有任何直接联系,即worker执行的结果client是不关心的;Future模式与之的差别就在于此线程池中执行的结果要返回(即有一个Future获取线程池中线程执行结果)。
类图如下:
具体实现代码如下:
Client(请求者)——Main类:
Client角色向Host角色发出请求,并立即接收到请求的处理结果——VirtualData角色,也就是Future角色。其不必知道返回值是RealData还是Future角色。稍后通过VirtualData角色来操作。
Host:
Host角色创建新的线程,由新线程创建RealData角色。同时,Host角色将Future角色(当做VirtualData角色)返回给Client角色。
VirtualData(虚拟数据)——Data接口:
VirtualData角色是让Future角色与RealData角色具有一致性的角色。
RealData(真实数据):
RealData角色是表示真实数据的角色。创建该对象需要花费很多时间。
Future——FutureData:
Future角色是RealData角色的“提货单”,由Host角色传递给Client角色。对Client而言, Future角色就是VirtualData角色;当Client角色操作Future角色时线程会wait,直到RealData角色创建完成。
时序图:
测试结果: