并发模式(一)Future模式

并行设计模式是对一些常用的多线程结构的总结和抽象,与串行程序设计相比,并行程序更复杂。

前言

常用的并发设计模式有Future模式、Master-Worker模式、Guarded Suspension模式、不变模式、生产者-消费者模式,在多线程环境中,合理使用模式,可以提高程序性能,优化程序设计。

接下来会记录这些模式的学习过程,一一成文,以便以后查阅和复习。

不变模式

不变模式的实现很简单,这里说明一下。不变模式天生就是多线程友好的。一个对象一旦被创建,则它的内部状态将永远不会发生改变,没有一个线程可以修改其内部状态和数据,同时内部状态也不会自行发生改变。基于这些特性,不变模式的对象,在多线程环境中不需要同步控制。

主要使用场景:

  1. 当对象创建后,其内部状态和数据不再发生任何变化;
  2. 对象需要被共享、被多线程频繁访问。

代码实现:

  1. final修饰类,确保不能被继承,没有子类;
  2. 所有属性私有化,并用final标记,确保不会被修改;
  3. 移除setter方法和其他所有修改自身属性的方法;
  4. 构造函数的参数包括所有的属性,提供赋值的窗口。

在JDK中,所有基本类型的包装类、String都是使用不变模式实现的。

Future模式

概念

Future模式是多线程设计常用的一种设计模式,类似商品订单。商品下单后,会立即得到下单成功的通知,客户不用等待后续商家的操作,只等配送到家即可,下单后到收到商品这段时间,客户可以做其他事情,不用在家等着商品。Future模式也类似Ajax的异步请求,不用等待处理结果。

处理流程

传统处理流程

客户端发出call请求,这个请求需要很长一段时间才能返回。客户端一直等待着,直到数据返回,随后进行其他业务处理。

这里写图片描述

Future模式流程

服务程序不需要等待数据处理完成便立即返回客户端伪造的数据(相当于商品的订单,而不是实际商品),客户端拿到这个返回结果后,并不急于对其处理,而是利用等待的时间,调用其他业务逻辑。这就是Future模式的核心所在。

这里写图片描述

主要参与者

Main:系统启动,调用client发出请求。
Client:返回Data对象,立即返回FutureData,并开启ClientThread线程装配RealData。
Data:返回数据的接口。
FutureData:Future数据,构造很快,但是是一个虚拟的数据,需要装配RealData。
RealData:真实数据,其构造过程是比较慢的。

代码实现

Future模式结构图

这里写图片描述

Main

//Future的简单实现。
// 系统启动,调用client发出请求
public 
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值