多线程_并发协作_生产者消费者模式

在多线程环境下只要发生“并发”我们就有责任保证数据的准确和安全,也就是通过synchronized达到线程同步、线程安全。
大家有没有思考过线程与线程之间怎么通讯与协作,解决这个问题有一个经典的协作【模型】,叫做生产者消费者模式,这种模式不是之前讲过的23种设计模式,比如之前讲过的静态代理、装饰模式,不是指这个。23种设计模式解决的是类跟类怎么组织的问题,类与类的关系。这里的生产者消费者模式指的是处理并发线程通信、线程协作的一个【模型】。
生产者消费者模式在日常生活种随处可见,在开发领域也是经常使用的。比如说服务器。

扩展知识:
PV:page view,页面访问量。
UV:unique view,唯一访问量。简单来说,就是你电脑打开一个客户端登录一次算一次。比如说你和你对象同时使用,那UV就算两个了。
VV:visit view,访问量。假设你上午打开一次,下午打开一次,那这个访问量就算是2了,一天不间断的访问那就是1,它按时间段来算的。
一般来说,看一个网站的并发就是看PV,UV主要是看有多少个用户去访问这个网站。VV主要是做一个参考。

像阿里这样的网站基本上都有三层:应用层、服务处、数据层(数据库)。层与层之间交互,不越级交互。那我们的生产者消费者模式就是在应用层和服务层之间进行解耦。怎么解耦呢,就是相互之间不用都等待,你有数据过来了我就给你处理,没有数据我就休息,不用一直盯着你。比如说购物,服务层有用户中心、商户中心、交易中心等,应用层就是给用户、商家打交道的界面层,我们称为app层,用户、商家各有各的登录界面,然后应用层和服务层之间进行交互。

大量的生产者消费者模式是使用“消息队列”来做的,使用消息队列彼此通信。

肯德基和麦当劳的购买方式不一样:麦当劳是先收钱,收完钱以后你在旁边等,这就是我们经典的生产者消费者模式;但是肯德基是你先点单,点完单服务人员把这个东西放在旁边,然后再收你的钱。其实麦当劳和肯德基采用的是不同的模式,在后期的服务器领域,它们是代表两种不同的模式,麦当劳代表的是生产者消费者模式,【一对多】;肯德基代表的是BIO服务器模式,B是Blocked阻塞的,阻塞IO的服务器模式,它是【一对一】的服务。

在解决生产者消费者仅有synchronized是不够的,因为我们还需要等待和通知,等待和通知是我们Object方法提供好的方法,任何一个对象都有,之前说过任何一个对象都有锁,现在任何一个对象上都有wait()、notify()、notifyAll()。
notify()是唤醒等待队列的第一个线程。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值