当前位置: 首页 > news >正文

广安网站建设公司加盟教育培训机构

广安网站建设公司,加盟教育培训机构,咋把网站制作成软件,做网站技术方法有目标: 1. 认识与使用阻塞队列 2. 认识与实现消费者模型 目录 阻塞队列的特点 生产者消费者模型 生产者消费者模型的优点 阻塞队列实现该模型 阻塞队列的特点 1. 线程安全 2. 带有阻塞特性 (1)如果队列为空,继续出队列&a…

目标:

1.  认识与使用阻塞队列

2.  认识与实现消费者模型

目录

阻塞队列的特点

生产者消费者模型

生产者消费者模型的优点

阻塞队列实现该模型


阻塞队列的特点

1.  线程安全

2.  带有阻塞特性

   (1)如果队列为空,继续出队列,就会发生阻塞。直到其他线程往队列里添加元素

   (2)如果队列为满,继续入队列,就会发生阻塞。直到其他线程从队列里取走元素

java库的阻塞队列

1. BlockingDeque为抽象类,不能直接new,java库中提供了 数组 和 链表的方式实现

2. 阻塞队列继承与Queue,要是想实现阻塞特性使用 put() 和 take() 方法


生产者消费者模型

以包饺子为例子,流程一般为:和面,擀饺子皮,包饺子。我擀饺子皮,另外的人负责包饺子消耗饺子。这种工作模式就是生产者-消费者模型。

但是我生产的饺子皮放到哪呢?一般是放到 盖帘 上(就相当于阻塞队列)。我擀饺子皮慢的话,另外的人就得等着我擀好,再包饺子。(从空的队列中获取元素时阻塞);我擀饺子皮快的话, 盖帘上 满了 ,我就得等待(往满的队列里添加元素也会堵塞)。


生产者消费者模型的优点

1.  解耦合

     两个模块,联系越紧密,耦合就越高。

     比如实现一个简单的分布式系统:

     客户端向A(服务器)发送请求,但是这个请求也得从A传到B,B再返回给A才能返回响应到客       户,这下A和B有着高耦合(B出现问题可能对A会有影响)。

     相比之下,使用生产者消费者模型,在A和B之间封装一个阻塞队列,让A传给这个阻塞队列,       再传给B,这下就降低了A与B的耦合(B出现问题对A没有影响)。

2. 削峰填谷

     峰:短时间内请求量多的

     谷:短时间内请求量比较少

     以上一个为例子,如果客户端传给A的数据比较多,则B也就会有很多数据。(可能会出现问           题:B不能直接承受这么多的数据)   

     先比之下, 使用生产者消费者模型,在A和B之间封装一个阻塞队列,让A传给这个阻塞队列,

     再传给B,在B所能承受的范围内,多余的先存放到队列中,这下B就不会挂了。


阻塞队列实现该模型

在这里生产者和消费者我们使用两个线程来表示。

1. 生产者生产的慢,消费的快

public class Tset {public static void main(String[] args) {BlockingDeque<String> queue = new LinkedBlockingDeque<>(1000);//生产者Thread t1 = new Thread(() -> {int num = 1;while (true) {try {queue.put(num + "");System.out.println("生产元素:" + num++);Thread.sleep(500);} catch (InterruptedException e) {throw new RuntimeException(e);}}});//消费者Thread t2 = new Thread(() -> {while (true) {try {String result = queue.take();System.out.println("消费元素" + result);} catch (InterruptedException e) {throw new RuntimeException(e);}}});t1.start();t2.start();}
}

2. 生产者生产的快,消费的慢

public class Tset {public static void main(String[] args) {BlockingDeque<String> queue = new LinkedBlockingDeque<>(1000);//生产者Thread t1 = new Thread(() -> {int num = 1;while (true) {try {queue.put(num + "");System.out.println("生产元素:" + num++);} catch (InterruptedException e) {throw new RuntimeException(e);}}});//消费者Thread t2 = new Thread(() -> {while (true) {try {String result = queue.take();System.out.println("消费元素" + result);Thread.sleep(500);} catch (InterruptedException e) {throw new RuntimeException(e);}}});t1.start();t2.start();}
}

http://www.ds6.com.cn/news/118809.html

相关文章:

  • 百度收录万网空间的网站需要多久seo外链怎么做
  • 深圳网站建设大公司排名seo代码优化有哪些方法
  • 镇江建工建设集团网站关键词优化公司排名
  • 没有外网ip怎么做网站seo搜索优化招聘
  • 宁波公司注册代理公司小时seo加盟
  • 中国英文政务网站建设seo搜索引擎优化到底是什么
  • 做网站一定要有空间吗百度账号登录官网
  • 中国核工业二三建设有限公司招聘信息无锡seo网络推广
  • 网站备案链接地址湖人今日排名最新
  • 网站开发手机自适应网站建设费用明细表
  • 5昌平区网站建设全国病毒感染最新消息
  • 唐河企业网站制作哪家好线上推广的方法
  • 群晖 wordpress规则seo网站诊断分析报告
  • 做wish如何利用数据网站外包公司和劳务派遣的区别
  • 企业网站设计有哪些新功能竞价推广价格
  • 关键词优化心得seo的基本工作内容
  • 黄冈网站优化公司哪家好免费行情软件网站下载大全
  • 做视频网站为什么费钱十大基本营销方式
  • 百度地图网站后台更新推广普通话海报
  • 专业中山建网站公司网上国网app推广方案
  • 申请一个域名常州seo外包公司
  • 国家认可提升学历正规机构seo外包品牌
  • 设计网站公司湖南岚鸿公司江苏seo
  • 游戏网站风格互联网推广方案
  • 推广网络网站线上推广外包公司
  • 有没有免费做任务赚钱的网站百度经验官网首页
  • 自己做的网站被攻击了手机优化大师官方免费下载
  • ui设计和前端开发哪个好聊城网站seo
  • iis内网站设置允许脚本执行班级优化大师的功能
  • 中英文网站建设游戏推广员一个月能赚多少