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

外链数是网站反向链接码/个人博客

外链数是网站反向链接码,个人博客,视频剪辑教程自学网站,如何上传安装wordpress1. 定义 要点 ● 与前面的保护性暂停中的 GuardObject 不同,不需要产生结果和消费结果的线程一一对应 ● 消费队列可以用来平衡生产和消费的线程资源 ● 生产者仅负责产生结果数据,不关心数据该如何处理,而消费者专…

1. 定义

要点
        ● 与前面的保护性暂停中的 GuardObject 不同,不需要产生结果和消费结果的线程一一对应
        ● 消费队列可以用来平衡生产和消费的线程资源
        ● 生产者仅负责产生结果数据,不关心数据该如何处理,而消费者专心处理结果数据
        ● 消息队列是有容量限制的,满时不会再加入数据,空时不会再消耗数据
        ● JDK 中各种阻塞队列,采用的就是这种模式

 2. 实现

//消息
class Message {private int id;private Object message;public Message(int id, Object message) {this.id = id;this.message = message;}public int getId() {return id;}public Object getMessage() {return message;}
}

 

//消息队列
class MessageQueue {private LinkedList<Message> queue;private int capacity;public MessageQueue(int capacity) {this.capacity = capacity;queue = new LinkedList<>();}public Message take() {synchronized (queue) {  //消息队列中的存储消息的双向链表是共享资源,对其上锁。while (queue.isEmpty()) {log.debug("没货了, wait");try {queue.wait();   //共享资源不足,对其上锁之后进入其的休息室等待(waitSet)} catch (InterruptedException e) { //此时消费者线程处于TIMED_WAITING状态e.printStackTrace();}}Message message = queue.removeFirst();queue.notifyAll();    //获取到资源了,//通知由于库存上限满而无法生产,处于等待的生产者线程开始生产。return message;}}public void put(Message message) {synchronized (queue) {while (queue.size() == capacity) {log.debug("库存已达上限, wait");try {queue.wait();} catch (InterruptedException e) {e.printStackTrace();}}queue.addLast(message);queue.notifyAll();   //唤醒未获取到资源而处于休息室等待的消费者线程}}
}

3. 测试

 MessageQueue messageQueue = new MessageQueue(2);
// 4 个生产者线程, 下载任务for (int i = 0; i < 4; i++) {int id = i;new Thread(() -> {try {log.debug("download...");List<String> response = Downloader.download();log.debug("try put message({})", id);messageQueue.put(new Message(id, response));} catch (IOException e) {e.printStackTrace();}}, "生产者" + i).start();}
// 1 个消费者线程, 处理结果new Thread(() -> {while (true) {Message message = messageQueue.take();List<String> response = (List<String>) message.getMessage();log.debug("take message({}): [{}] lines", message.getId(), response.size());}}, "消费者").start();

结果:

        4个生产者下载任务,消费者线程未获取到资源,wait。生产者线程都下载好后,尝试存入消息队列,由于容量为2,只存入两个消息,生产者2和1线程wait。之后消费者逐渐消费完所有资源。

 

http://www.lbrq.cn/news/970273.html

相关文章:

  • 河南住房和城乡建设厅一体化平台网站/必应bing搜索引擎
  • 建设法律法规文本查询网站/郑州seo招聘
  • 经济与政府网站建设/深圳百度地图
  • 今日新闻头条内容/网站怎么做优化排名
  • 品辰设计的网站谁做的/教育机构加盟
  • 响应式网站 外贸/小吃培训机构排名前十
  • 分类网站有哪些/长沙好的seo外包公司
  • 网站建设实训日志/网络营销个人总结
  • 就业网站哪个靠谱/线上网络推广怎么做
  • 四川专门做招聘酒的网站/网络营销专业技能
  • 做网站产品图片素材/关键词优化最好的方法
  • 网站出现转站怎么办/seo 怎么做到百度首页
  • 阿里巴巴网站域名建设/nba西部排名
  • 网站产品要如何做详情/广州百度seo排名
  • 常德网站公司/百度一下你就知道官网
  • 一个人只做网站的流程/最近七天的新闻重点
  • 扬中市新闻网站/seo软件优化工具软件
  • 设计网站页面的作文/seo站内优化包括
  • 龙岩app定制/seo托管公司
  • 唐河做网站/seo视频教程汇总
  • 做的比较好的购物网站/百度开户需要什么资质
  • 学校门户网站建设的优势/网络推广引流是做什么工作
  • wordpress博客自媒体资讯主题/武汉seo和网络推广
  • 哪些网站做平面单页好看/搜索引擎公司排名
  • 中城投建设集团网站/手机网站seo免费软件
  • 服装商城的网站建设/网站关键词排名
  • 河南免费网站建设公司/百度一下你就知道下
  • 用手机制作动画的app/系统优化方法
  • wordpress插件webGL/seo关键词报价查询
  • 可以自己做装修效果图的网站/集合竞价口诀背熟6句
  • 在UE中如何操作视图的大小,方位,移动
  • 《设计模式之禅》笔记摘录 - 7.中介者模式
  • 深入核心:理解Spring Boot的三大基石:起步依赖、自动配置与内嵌容器
  • 已知均数与标准差,如何生成一组正态分布数据?
  • 亚矩阵云手机:破解 Yandex 广告平台多账号风控难题的利器
  • 零售企业用户行为数据画像的授权边界界定:合规与风险防范