zoukankan      html  css  js  c++  java
  • 6.21Java多线程并发协作

    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()方法的线程,优先级高的线程优先调度
    It's a lonely road!!!
  • 相关阅读:
    工具资源系列之给 windows 虚拟机装个 mac
    工具资源系列之 github 上各式各样的小徽章从何而来?
    php 学习笔记之日期时间操作一箩筐
    2018-12-03 VS Code英汉词典插件v0.0.7-尝试词性搭配
    2018-11-29 VS Code英汉词典插件v0.0.6-改为TS实现, 加测试
    2018-11-27 中文代码示例之Programming in Scala笔记第七八章
    2018-11-23 手工翻译Vue.js源码:尝试重命名标识符与文本
    2018-11-21 手工翻译Vue.js源码第一步:14个文件重命名
    2018-11-16 中文代码示例之Programming in Scala笔记第四五六章
    2018-11-13 中文代码示例之Programming in Scala学习笔记第二三章
  • 原文地址:https://www.cnblogs.com/JunkingBoy/p/14915348.html
Copyright © 2011-2022 走看看