java多线程之生产者和消费者问题

线程通信:不同的线程执行不同的任务,如果这些任务有某种关系,线程之间必须能够通信,协调完成工作.

经典的生产者和消费者案例(Producer/Consumer):

     分析案例:

              1):生产者和消费者应该操作共享的资源(实现方式来做).

              2):使用一个或多个线程来表示生产者(Producer).

              3):使用一个或多个线程来表示消费者(Consumer).

生产者消费者的示意图:

为什么生产者不直接把数据给消费者,而是先把数据存储到共享资源中,然后,消费者再从共享资源中取出数据,再消费.

在这里体现了面向对象的设计理念:低耦合.

       高(紧)耦合: 直接使用生产者把肉包子给消费者,那么生产者中得存在消费者的引用,同理,消费者要消费生产者生产的肉包子,消费者中也得存在生产者对象的引用. 例子:主板和集成显卡.

      低(松)耦合:使用一个中间对象,屏蔽了生产者和消费者直接的数据交互.  例子:主板和独立显卡.

高(紧)耦合://生产者
public class  Producer{private  Consumer  con;//消费者对象
}//消费者
public  class    Consumer{private  Producer  pro;//消费者对象
}

低(松)耦合:
//共享资源
public  class ShareResource{
}//生产者
public class  Producer{private  ShareResource  resource;//共享资源对象
}//消费者
public  class    Consumer{private  ShareResource  resource;//共享资源对象
}

实现代码截图:


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/509713.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据结构上机测试1:顺序表的应用

题目描述 在长度为n&#xff08;n<1000)的顺序表中可能存在着一些值相同的“多余”数据元素&#xff08;类型为整型&#xff09;&#xff0c;编写一个程序将“多余”的数据元素从顺序表中删除&#xff0c;使该表由一个“非纯表”&#xff08;值相同的元素在表中可能有多个&a…

学习方法

在看书籍或者网上看技术知识的时候&#xff0c;要学会以点带面&#xff0c;以一点知识联想到与其相关的知识&#xff0c;再有相关的知识引申到其他相关的知识&#xff0c;这样的话看一本书或者一个技术点的时候就能学到更多的新知识&#xff0c;而且还能够回想起以前学过的知识…

时序数据库技术体系 – InfluxDB TSM存储引擎之数据写入

之前两篇文章笔者分别从TSM File文件存储格式、倒排索引文件存储格式这两个方面对InfluxDB最基础、最底层也最核心的存储模块进行了介绍&#xff0c;接下来笔者会再用两篇文章在存储文件的基础上分别介绍InfluxDB是如何处理用户的写入&#xff08;删除&#xff09;请求和读取请…

zookeeper结构和命令详解

1.1. zookeeper特性1、Zookeeper&#xff1a;一个leader&#xff0c;多个follower组成的集群 2、全局数据一致&#xff1a;每个server保存一份相同的数据副本&#xff0c;client无论连接到哪个server&#xff0c;数据都是一致的 3、分布式读写&#xff0c;更新请求转发&#xf…

时序数据库技术体系 – InfluxDB 多维查询之倒排索引

在时序数据库概述一文中&#xff0c;笔者提到时序数据库的基础技术栈主要包括高吞吐写入实现、数据分级存储&#xff5c;TTL、数据高压缩率、多维度查询能力以及高效聚合能力等&#xff0c;上文《时序数据库技术体系 – InfluxDB存储引擎TSM》基于InfluxDB存储引擎TSM介绍了时序…

顺序表应用1:多余元素删除之移位算法

题目描述 一个长度不超过10000数据的顺序表&#xff0c;可能存在着一些值相同的“多余”数据元素&#xff08;类型为整型&#xff09;&#xff0c;编写一个程序将“多余”的数据元素从顺序表中删除&#xff0c;使该表由一个“非纯表”&#xff08;值相同的元素在表中可能有多个…

《暗时间》-----摘记

http://blog.sina.com.cn/s/blog_6af5df430101ab83.html -------整理 最近花了3天左右的下班时间和上班之前的时间把刘未鹏先生关于学习方法的相关博客看了一遍&#xff0c;觉得讲得很有道理&#xff0c;下面把觉得我感受很深的地方摘录下来了。 特别说明&#xff1a;本文是我对…

Hbase 协处理器 RegionObserver

参考链接1&#xff1a;https://www.cnblogs.com/ios123/p/6370724.html 参考链接2&#xff1a;http://www.zhyea.com/2017/04/13/using-hbase-coprocessor.html RegionObserver 注&#xff1a;每次更新协处理器方法&#xff0c;最好加上版本更新&#xff0c;否则可能会出现更…

搭建zookeeper集群环境详解

第一步:上传zookeeper.jar.gz文件至一台虚拟机&#xff0c;并解压至 /root/apps 目录下&#xff08;如没有该目录则手动创建&#xff09; 第二步&#xff1a;进入在/root/apps/zookeeper目录下 &#xff0c;删除不必要文件 rm -rf .txt .xml docs dist-maven src 第三步: 进入…

顺序表应用2:多余元素删除之建表算法

题目描述 一个长度不超过10000数据的顺序表&#xff0c;可能存在着一些值相同的“多余”数据元素&#xff08;类型为整型&#xff09;&#xff0c;编写一个程序将“多余”的数据元素从顺序表中删除&#xff0c;使该表由一个“非纯表”&#xff08;值相同的元素在表中可能有多个…

OSG框架分析

本文参考<<osg最长一帧>>, <<OpenSceneGraph三维渲染引擎编程指南>>, <<OpenSceneGraph三维渲染引擎设计与实践>> 整理而来, 感谢大牛们的精彩著作. 相比Ogre来说, Ogre代码很规范, 只是入门资料较少,如果能在学习之前能总体上对架构有个…

自动化部署脚本开启所有zookpeer等服务

1.为了方便ssh连接&#xff0c;最好把所有的主机之间实现免密登录 ssh-keygen sh-copy-id 主机名 2.在根目录下新建bin文件夹&#xff0c;并创建部署的脚本start.sh #!/bin/bash for i in 1 2 3 dossh weijie$i "source /etc/profile; /root/apps/zookeeper-3.4.5/bin…

顺序表应用3:元素位置互换之移位算法

题目描述 一个长度为len(1<len<1000000)的顺序表&#xff0c;数据元素的类型为整型&#xff0c;将该表分成两半&#xff0c;前一半有m个元素&#xff0c;后一半有len-m个元素&#xff08;1<m<len)&#xff0c;借助元素移位的方式&#xff0c;设计一个空间复杂度为O…

Hbase 协处理器之将数据保存到es (二级索引)

利用Hbase Coprocessor 实现将插入hbase中的数据保存至ElasticSearch中&#xff0c;实现二级索引目的 版本&#xff1a; Hbase&#xff1a; 2.1 ES&#xff1a;6.3.0 一、Coprocessor代码开发 协处理器类 package wiki.hadoop.coprocessor;import org.apache.hadoop.hbas…

Delta3d框架学习--程序启动过程详解

一个Delta3d程序启动过程详解 一、初始化一个dtGame::GameApplication的实例&#xff0c;dtGame::GameApplication* app new dtGame::GameApplication(); 设置游戏库的名称&#xff0c;SetGameLibraryName("libname")&#xff1b; 调用app->Config("conf…

在Eclipse中如何操作zookpeer

导入jar包 jar包下载链接 代码解析 package com.itcast.zookpeer.zk;import java.io.IOException; import java.util.List;import org.apache.zookeeper.CreateMode; import org.apache.zookeeper.KeeperException; import org.apache.zookeeper.WatchedEvent; import org.apac…

顺序表应用4:元素位置互换之逆置算法

题目描述 一个长度为len(1<len<1000000)的顺序表&#xff0c;数据元素的类型为整型&#xff0c;将该表分成两半&#xff0c;前一半有m个元素&#xff0c;后一半有len-m个元素&#xff08;1<m<len)&#xff0c;设计一个时间复杂度为O(N)、空间复杂度为O(1)的算法&am…

Linux 系统进程守护工具 cesi + superviosr

一、安装 Supervisor pip install supervisor 使用 echo_supervisord_conf 命令生成默认配置文件 echo_supervisord_conf > /etc/supervisord.conf 配置文件说明 位置&#xff1a;etc/supervisord.conf内容&#xff1a;# 指定了socket file的位置 [unix_http_server] f…

Delta3d组件以及消息机制

在游戏管理器&#xff08;GameManager&#xff09;中维护一个消息队列std::queue(mSendMessageQueue),在GameManager::SendMessage中将消息放入队列中&#xff0c;如下 void GameManager::SendMessage(const Message& message){mGMImpl->mSendMessageQueue.push(dtCore:…

集合类三种遍历方式

package com.test;import java.util.ArrayList; import java.util.Iterator;//集合三种遍历方式 /** iterator的操作是有限的&#xff0c;只能对元素进行判断、取出、删除操作* 如果进行其他操作用ListIterator* */ public class Array_list {public static void main(String[]…