首页 > 其他分享 >多线程设计模式之Future模式

多线程设计模式之Future模式

时间:2024-06-20 10:33:03浏览次数:20  
标签:设计模式 角色 VirtualData Client RealData 线程 多线程 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角色创建完成。

             

  时序图:

            

  测试结果:

            

 

标签:设计模式,角色,VirtualData,Client,RealData,线程,多线程,Future
From: https://www.cnblogs.com/ilovebath/p/18257252

相关文章

  • 赶紧收藏!2024 年最常见 20道设计模式面试题(七)
    上一篇地址:赶紧收藏!2024年最常见20道设计模式面试题(六)-CSDN博客十三、享元模式如何优化资源使用?享元模式(FlyweightPattern)是一种结构型设计模式,用于减少创建对象的数量,以减少内存占用和提高性能。这种模式通过共享多于一个对象共同使用的相同状态,来优化资源使用。享元模......
  • 设计模式之-组合模式
    组合模式是一种结构型设计模式,用于将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得客户端可以统一地处理单个对象和对象组合,无需区分它们的差异。组合模式主要解决的问题是当我们需要处理对象的层次结构,并希望能够以统一的方式对待单个对象和对象组合时。它使......
  • java设计模式-抽象工厂模式
    抽象工厂模式是一种创建一系列相关或相互依赖对象的设计模式。它通过定义一个抽象工厂接口,该接口声明了一组用于创建不同类型对象的方法,具体的工厂类实现这个接口并负责创建具体的对象。抽象工厂模式属于创建型模式的一种,可以帮助我们创建一族相关的对象。抽象工厂模式主要解决的......
  • 持续总结中!2024年面试必问 20 道设计模式面试题(六)
    上一篇地址:持续总结中!2024年面试必问20道设计模式面试题(五)-CSDN博客十一、迭代器模式(IteratorPattern)解决了什么问题?迭代器模式(IteratorPattern)解决了如何顺序访问一个聚合对象中的各个元素,而不暴露其内部的表示的问题。这种模式定义了一种方法来遍历集合,同时保持了对象......
  • 设计模式-利用状态机实现订单状态流转控制
    状态机是状态模式的一种应用,相当于上下文角色的一个升级版。在工作流和游戏中有大量使用。如各种工作流引擎,几乎是状态机的子集和实现,封装状态的变化规则。Spring也给我们提供了一个很好的解决方案。在spring中的组件名称就叫StateMachine。状态机简化状态控制的开发过程,让状态机......
  • 设计模式-命令模式
    命令模式命令模式是对命令的封装,每一个命令都是一个操作:请求的一方发出请求要求执行一个操作;接收的一方收到请求,并执行操作。命令模式解耦了请求方与接收方,请求方只需要请求执行命令,不用关心命令时怎样被接收,怎样被操作以及是否被执行等。命令模式属于行为型模式。角色:接收者......
  • 设计模式-状态模式
    状态模式状态模式也成为状态机模式,是允许对象在内部状态发生改变时改变它的行为。对象看起来好像改变了它的类,属于行为型模式。角色:上下文角色(Context):定义客户端需要的接口,内部维护一个当前状态实例,并负责具体状态的切换。抽象状态角色(State):定义该状态下的行为,可以有一个或多......
  • 设计模式-迭代器模式
    迭代器模式迭代器模式,又称为游标模式,它提供一种顺序访问集合/容器对象元素的方法,而又无需暴漏集合内部表示。迭代器模式可以为不同的容器提供一致的遍历行为,而不用关心容器内容元素组成结构,属于行为型模式。角色:抽象迭代器Iterator:负责定义访问和遍历元素的接口具体迭代器Con......
  • 整理好了!2024年最常见 20 道设计模式面试题(五)
    上一篇地址:整理好了!2024年最常见20道设计模式面试题(四)-CSDN博客九、什么是命令模式?它如何帮助实现解耦?命令模式(CommandPattern)是一种行为设计模式,它将一个请求或操作封装为一个对象。这种模式的主要目的是将发起请求的对象与执行请求的对象解耦,从而让不同的请求、队列或者......
  • java object多大 java对象内存模型 数组有多长(八)多线程
    在javaobject多大java对象内存模型数组有多长(四)已经访问的对象记录优化中,用byte数组处理,现在它将暴露在多线程中 1对byte数组加volatile2可见性:用Unsafe控制ConcurrentHashMap内并发数组元素的可见性中的方法来byte数组元素的读写 原子性1)compareandsetbyte 2......