`

用点菜和吃菜来做模拟(生产者和消费者的多线程关系)

阅读更多


这里是要操作的对象

class Food {
	//菜名
	private String name;
	//菜是否做好
	private boolean flag = false;


	/**
	 * @return the name
	 */
	public String getName() {
		return name;
	}

	/**
	 * @param name the name to set
	 */
	public void setName(String name) {
		this.name = name;
	}
	

	/**
	 * 点菜
	 * 如果flag为true,说明客人正在吃上的那一道菜。还没通知上下一道菜,让其等待
	 * 如果flag为false,这里线程睡眠一秒表示做菜需要的时间
	 * 然后将flag置为true,说明菜做好了,通知可以上了(notify)
	 * @param name
	 */
	public synchronized void callFood(String name){
		if(flag){
			try {
				super.wait();
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
		try {
			Thread.sleep(1000);
		} catch (Exception e) {
			e.printStackTrace();
		}
		this.name = name;
		System.out.println("生产菜=" + name);
		flag = true;
		super.notify();
	}
	
	
	
	/**
	 * 上菜
	 * 如果flag为false,表示正在做这道菜。菜还没有做好让其等待
	 * 如果flag为true,可以吃这道菜了
	 * 这里线程睡眠一秒表示吃菜需要的时间
	 * flag置为false表示吃完了。需要下一道菜,然后通知厨房可以上下一道菜了(notify)
	 */
	public synchronized void upFood(){
		if(!flag){
			try {
				super.wait();
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
		try {
			Thread.sleep(1000);
		} catch (Exception e) {
			e.printStackTrace();
		}
		flag = false;
		System.out.println("消费菜=" + name);
		super.notify();
	}
	
}

 

这里的厨房代表生产者

 

//厨房
class Maker implements Runnable{
	private Food food;

	public Maker(Food food) {
		super();
		this.food = food;
	}

	@Override
	public void run() {
		for (int i = 0; i < 10; i++) {
			this.food.callFood("鸡"+i);
		}
	}
	
}

 这里的客人代表消费者

 

 

//客人
class Eater implements Runnable {
	private Food food;

	public Eater(Food food) {
		super();
		this.food = food;
	}

	@Override
	public void run() {
		for (int i = 0; i < 10; i++) {
			this.food.upFood();
		}
		
	}
	
}

 

这里是main方法

 

public class CustomThreadExample {
	public static void main(String[] args) {
		Food food = new Food();
		Maker maker = new Maker(food);
		Eater eater = new Eater(food);
		new Thread(maker).start();
		new Thread(eater).start();
	}
}

 

0
0
分享到:
评论

相关推荐

    Java多线程:多生产者和消费者的餐厅运行模拟

    要求设计多线程Java程序模拟该餐厅运营,同时考虑同步和死锁问题。程序运行时读取以下格式的文件:文件的第一行包含一个代表服务员数量的数字。第二行包括第一个服务员的姓名、顾客人数、第一个服务员的姓名、开胃菜...

    C++模拟餐馆点菜系统

    你可以到一个餐馆去仔细研究一下餐馆的业务流程:...顾客来了以后,服务生先给客人找一张桌子坐下来,然后递上菜谱等待顾客点菜,顾客可以点一个菜,也可以退菜,完了之后结账走人,这张桌子又可以用来招待下一批顾客。

    电子菜谱点菜系统说明(详细)和电子菜谱后台操作界面说明

    从提供的文件名来看,"电子菜谱后台操作界面说明.doc"应详细介绍了如何添加、编辑和删除菜品信息,如何设置菜品分类,以及如何管理订单和库存。"电子菜谱点菜系统说明(详细).doc"则可能涵盖了系统的基本功能、使用...

    模拟点菜系统

    在IT领域,开发一个模拟点菜系统是常见的实践项目,尤其适合初学者学习编程和软件工程的基础。本系统采用C语言进行编写,C语言是一门基础且强大的编程语言,它提供了底层控制,使得开发者能直接与硬件交互,适合实现...

    模拟点菜(教学用例)

    【模拟点菜(教学用例)】是一...总的来说,“模拟点菜”小程序是一个极好的教学工具,它结合了实际应用场景,帮助初学者以趣味性的方式学习编程,同时也为他们提供了实际项目经验,有助于提升问题解决能力和编程思维。

    模拟美团app点菜下单看订单

    在点菜、下单和查看订单的过程中,我们需要创建多个活动来表示不同的功能页面,比如菜品列表页、购物车页、订单确认页和订单详情页。每个活动都需要设计合适的布局和交互逻辑。 2. **UI设计**:在Android中,界面...

    点菜系统源码下载,适合C#初学者

    在大型系统中,为了提高性能,可能会使用多线程技术来处理并发请求,如处理多个顾客同时点餐。初学者可以学习如何在C#中创建和管理线程。 9. 数据绑定: 界面中的控件可能与后台数据源进行绑定,比如菜品列表显示...

    PHP点菜系统管理

    MySQL是世界上最流行的开源关系型数据库管理系统,因其高效的性能和易用性而被广泛应用。在点菜系统中,MySQL存储了菜品信息、订单详情、用户数据等关键信息。a.sql文件很可能是数据库的结构定义或初始数据,通过SQL...

    OrderDish点菜系统 c语言实现

    此外,为了保证数据的安全性,可能还需要考虑多线程同步、数据库备份等高级特性。 总的来说,C语言实现的OrderDish点菜系统虽然相对基础,但却是一个很好的学习实践案例。它展示了如何利用C语言的基本特性,结合...

    c# 点菜系统 包括选菜结算

    可以使用SQLite或SQL Server等数据库存储菜品信息,包括菜品ID、名称、价格、图片等,通过ADO.NET进行数据交互。 2. 搜索与筛选:用户可以通过关键词搜索菜品,系统需提供模糊搜索功能。同时,支持按照价格、口味、...

    C++模拟餐厅管理点菜系统--课程设计

    馆事先准备好自己的招牌菜及一些常规的菜式,有营业场所,服务人员等;顾客 来了以后,服务生先给客人找一张桌子坐下来,然后递上菜谱等待顾客点菜,顾 客可以点一个菜,也可以退菜,完了之后结账走人,这张桌子又...

    无线点菜系统(客户端和服务器端交互)

    服务器端的设计通常需要考虑到并发处理能力和数据一致性,可能采用多线程或异步处理机制来优化性能。 “酒水”可能是一个单独的模块,专门处理酒水类产品的点单和服务。这个模块需要特别处理如配杯、瓶装与散装的...

    博立点菜宝使用说明

    1. **初始化设置**:首次使用需根据《博立点菜机说明书》进行设备激活和菜单导入,确保所有菜品信息正确无误。 2. **电池管理**:点菜宝通常采用可充电电池,注意定期充电,避免因电量不足影响使用。 3. **故障排查*...

    掌中宝点菜手机点菜系统

    总的来说,掌中宝点菜手机点菜系统是通过Java技术和Andriod平台实现的高效餐饮解决方案,结合数据库管理,提供了全面的点餐服务。通过MyEclipse的开发支持,确保了系统的稳定性和用户体验。这款系统对于提升餐饮行业...

    酒店点菜系统 点菜 加菜 主食 菜分类 还可以自己加个酒水

    总的来说,这个酒店点菜系统是一个适合初学者实践的项目,涵盖了Web开发的基础知识,如ASP.NET框架的应用、数据库操作、前端交互设计以及简单的业务逻辑处理。通过研究和理解这个系统,开发者可以提升自己的编程技能...

    点菜系统 c#.net

    数据库方面,点菜系统一般会采用关系型数据库如SQL Server或MySQL来存储菜品信息、订单数据等。C#.NET提供了ADO.NET框架,可以方便地连接和操作数据库,执行查询、插入、更新和删除等操作。在设计数据库时,需要考虑...

    点菜软件点菜宝

    "点菜软件点菜宝"是一款专为餐饮行业设计的智能点菜系统,由易石公司开发。易石是一家在餐饮信息化解决...点菜宝的使用不仅提高了点菜效率,减少了顾客等待时间,还能通过数据分析帮助餐厅优化菜品组合,提升经营效益。

    蓝牙无线点菜系统蓝牙无线点菜系统

    蓝牙无线点菜系统是一种高效、便捷的餐饮业管理工具,它利用蓝牙技术实现了餐厅与厨房之间的无缝通信,提升了餐厅的服务质量和效率。以下是对这个系统的详细解释: 1. **蓝牙技术**:蓝牙是一种短距离无线通信技术...

Global site tag (gtag.js) - Google Analytics