问题引入:模拟一家公司生产电脑与销售电脑.
设计类:电脑产品类、库存类、生产者类、消费者类.
1、电脑产品类
/** 产品类电脑 **/
class Computer {
int computerid;//产品id
Computer(int computerid) {
this.computerid = computerid;
}
//重写toString方法,便于打印
public String toString() {
return "computer :" + computerid;
}
}
2、库存类
库存里有一个容器,专门是用于存放电脑。从面向对象的角度思考,存放电脑的方法与取出电脑的方法应该分配给库存类本身,而不应该是人(生产者类或消费者类).这两个方法都操作了同一个成员变量,因此要把这两个方法都设置成为同步synchronized。
class Storage {
// 先进先出
LinkedList<Computer> computers = new LinkedList<Computer>();
/** 往库存里放电脑 **/
public synchronized void push(Computer computer) {
while (computers.size()== 20) {// 多次检查要调用while而不能是if
try {
this.wait(); // 不会拿着锁不放,sleep方法就会抱着锁不放
} catch (InterruptedException e) {
e.printStackTrace();
}
}
computers.addLast(computer);
this.notifyAll();
}
/** 从库存里取电脑 **/
public synchronized Computer pop() {
while (computers.size() == 0) {
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
Computer computer =computers.removeFirst();
this.notifyAll();// 唤醒线程
return computer;
}
}
3、生产者类
生产者类应该有一人指向某个库存的引用,将生产的电脑放入指定的库存里.同时也要实现Runnable接口,实现run()方法.
class Producer implements Runnable {
Storage storage = null;
Producer(Storage storage) {
this.storage = storage;
}
public void run() {
for (int i = 0; i < 20; i++) {
Computer computer = new Computer(i);
storage.push(computer);
System.out.println("生产了电脑:" + computer);
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
4、消费者类
消费者类也应该有一人指向某个库存的引用,指定从哪一个库存里取电脑.同时也要实现Runnable接口,实现run()方法.
class Consumer implements Runnable {
Storage storage = null;
Consumer(Storage storage) {
this.storage = storage;
}
public void run() {
for (int i = 0; i < 20; i++) {
Computer computer = storage.pop();
System.out.println("售出了电脑:" + computer);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
5、测试类
实例化一个库存类对象,让生产者和消费者都同时引用这一个库存对象,然后启动两个线程,一个是生产者,另一个是消费者.
public class ProducerTest2 {
public static void main(String[] args) {
Storage storage = new Storage();
Producer p = new Producer(storage);
Consumer c = new Consumer(storage);
//启动一个生产者的线程
new Thread(p).start();
//启动一个消费者的线程
new Thread(c).start();
}
}
运行结果: 生产先于消费,最后输出的总是消费的产品.
分享到:
相关推荐
【电脑销售计划】 电脑销售计划的核心在于理解和分析市场,制定有效的销售策略,以提升品牌知名度,扩大市场份额。在昌图这个经济相对落后但电脑需求逐渐增长的城市,电脑销售的首要任务是了解目标消费群体和竞争...
消防产品生产销售流向管理系统试题.pdf 本资源是关于消防产品生产销售流向管理系统的试题,共35道选择题和判断题,涵盖了系统的客户端登陆、注册信息、新建注册信息、联网查询、服务器端管理、产品生产上报、标志...
### 区块链技术对电脑销售行业的影响与展望 #### 一、区块链技术概述及其在电脑销售行业的应用 - **区块链技术定义**:区块链技术是一种分布式数据库,它由多个节点共同维护,每个节点都保存着区块链的完整副本。...
【戴尔电脑销售技巧】 在销售领域,尤其是技术类产品如戴尔电脑的销售,掌握一定的技巧至关重要。本PPT着重讲解了店面销售人员如何提升销售业绩,涵盖了自我认知、接待顾客、产品介绍、处理异议以及成交后的服务等...
试销合同中,甲方(销售方)和乙方(生产商)达成一致,甲方同意按照一定的条件试销乙方的产品。而在销售合同中,买卖双方明确约定商品的规格、价格、支付方式、验收交付、售后服务、双方的责任和权利以及违约处理。...
- 业务内容:涉及电脑销售、组装,了解硬件配件,以及与客户交流。 这些实习报告反映了实习生在电脑销售行业的实践经历,包括他们如何在实际工作中应用所学,以及如何通过实习提升个人技能和职业素养。在这样的...
【电脑销售计划】\n\n在当今社会,电脑已经不再是一种奢侈品,而是普遍存在于各个家庭和工作场所的必需品。电脑市场的稳定增长伴随着激烈的竞争,尤其是对于地处经济发展相对滞后地区的昌图市。在这个市场中,电脑...
标题中的“品牌电脑logo和配置文件”意味着这个压缩包中包含的是多个知名电脑品牌的标识(logo)以及它们的配置信息。...总的来说,这个压缩包是一个集视觉识别与技术参数于一体的电脑品牌综合资料库。
2. 月度与日生产计划:根据每月销售订单,生产部门需编制月生产计划和日作业计划,以保证生产进度与市场需求相匹配,提高生产效率。 二、成本控制与消耗定额 1. 生产消耗定额:生产部门需制定并修订生产消耗定额,...
此外,生产部门还需要负责处理与客户相关的一系列事务,如客户访问记录、赊货申请、促销活动的销量统计、市场价格调查、大客户管理、渠道销售反馈、客户借款申请、出差报销、滞销商品分析、费用统计、短途旅行费用...
标题中的“电脑销售工作计划范文怎么写”表明我们要讨论的是如何制定有效的电脑销售计划,特别是针对华硕电脑的销售策略。描述中提到的华硕电脑的发展历程和市场环境分析,暗示了我们需要关注市场趋势、产品定位以及...
"领智电脑行业管理系统"是一款专为电脑行业设计的综合性管理软件,旨在帮助电脑销售、维修和服务企业提高工作效率,优化业务流程。系统可能包含了多个模块,如库存管理、销售管理、采购管理、客户关系管理(CRM)...
3. **生产与销售权**:甲方只负责生产,无权经营销售“____”牌商标的微型计算机,这意味着销售环节由乙方负责。 4. **质量控制**:甲方需按照乙方订单的规格说明书进行生产,并严格按照质量标准进行质量控制,确保...
该项目由迪尔影像科技公司提出,该公司注册资本1000万元人民币,主要从事电脑软件及设备研究、医疗器械生产和销售。DR影像系统主要用于医疗领域X线机的诊断,是一种现代电子信息技术产品,可替代传统胶片技术。项目...
重点分析全球与中国市场的主要厂商产品特点、产品规格、价格、销量、销售收入及全球和中国市场主要生产商的市场份额。历史数据为2017至2021年,预测数据为2022至2028年。 著作权归作者所有,详情内容请联系发布者。
永翔电子拥有自己的贴片生产线,销售范围包括PCBA主板和整机。 - **产品线**:AMLogic 8726-M、AMLogic M3等。 - **销售模式**:销售PCBA主板及整机。 - **官方网站**:[http://www.szyongxiang.com]...
**最新软件销售合同电脑销售标准版合同** 在签订任何商业交易,尤其是涉及电脑及软件的销售时,一份详细的合同是必不可少的。以下是对该“最新软件销售合同电脑销售标准版合同”的关键知识点的详细说明: **一、...
【台式电脑与笔记本电脑市场概述】 台式电脑和笔记本电脑是个人计算机市场中的两大主要类型。台式电脑通常包括中央处理器、内置硬盘驱动器、显示器、键盘和鼠标等基本外设,而笔记本电脑则更加便携,集成了这些功能...
2. **品牌制造商**:如Apple、Samsung、Lenovo等品牌,它们负责设计和生产最终的平板电脑产品,并通过各种销售渠道推向市场。 3. **操作系统平台提供商**:主要有苹果的iOS、Google的Android、Microsoft的Windows等...