码迷,mamicode.com
首页 > 编程语言 > 详细

6.21Java多线程并发协作

时间:2021-06-22 17:45:27      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:unique   用户   处理   and   时间段   object   消费   没有   网站   

6.21Java多线程并发协作

线程间如何通讯?

由于在多线程中,一旦创建了线程就开辟了工作空间。各工作空间与主存进行交互,没有涉及如何与其他线程进行交互。

所以线程与线程间的通讯通过一个写作模型:

生产者、消费者模式

不同于之前的静态代理、装饰模式等模式(这一类模式解决的是类与类之间的关系)

这个模型专门解决的是并发线程写作的

服务器当中也广泛存在

生产者、消费者模式--->一对多BIO模式:--->Blocked阻塞IO模式--->一对一快速处理

PV: page view--->每一个页面的访问量(网站并发指标)

UV: unique view--->唯一访问量(同一个用户不同客户端算两次--->推断用户数量)

VV: visit view--->访问量(不同时间段的访问量--->一天看了几次网站)

分层操作:

  • 应用层--->App层(多个端)

  • 服务层--->用户中心、商户中心、交易中心

  • 数据层

(不能越级交互)-->(生产、消费者模式位于应用层和服务层,在此之间进行解耦)

生产者、消费者模式必备及要素--->先收钱,在等待
  • 仓库中只能存放一件产品(队列中只能有一个等待线程)

  • 如果仓库中没有产品,则生产者将产品放入仓库。否则停止生产并等待,直到仓库中的产品被消费者取走为止(队列中没有线程才会加入一个线程并且直到队列中的线程执行完毕后才会加入下一个线程)

  • 如果仓库中放有产品,则消费者可以将产品取走消费。否则停止消费并等待,直到仓库中再次放入产品为止。

仓库是生产者和消费者交互的地方--->应用到线程中进行通信

在生产者消费者问题中,仅有synchronized是不够的

  • synchronized可阻止并发更新同一个共享资源,实现了同步

  • 但是不能用来实现不同线程之间的消息传递(通信)

    • 等待通知是Object对象

    • 任何一个对象都有一个wait方法

    • 都有一个notify---notify all方法

线程通信实现方法

技术图片

生产者只负责生产数据

消费者只负责处理数据

缓冲区:队列、容器

生产者不用于消费者直接交互

信号灯法(等待、唤醒都是Object已有的方法)
方法名作用
final void wait() 表示线程一直等待,直到其他线程通知。与sleep不同,会释放锁
final void wait(long timeout) 指定等待毫秒数
final void notify() 唤醒一个处于等待状态的线程
final void notifyAll() 唤醒同一个对象上所有调用wait()方法的线程,优先级高的线程优先调度

6.21Java多线程并发协作

标签:unique   用户   处理   and   时间段   object   消费   没有   网站   

原文地址:https://www.cnblogs.com/JunkingBoy/p/14915348.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!