多线程设计模式之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角色创建完成。

             

  时序图:

            

  测试结果:

            

 

posted on 2024-06-20 10:23  池塘里洗澡的鸭子  阅读(12)  评论(0编辑  收藏  举报