这里是要操作的对象菜
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(); } }
相关推荐
要求设计多线程Java程序模拟该餐厅运营,同时考虑同步和死锁问题。程序运行时读取以下格式的文件:文件的第一行包含一个代表服务员数量的数字。第二行包括第一个服务员的姓名、顾客人数、第一个服务员的姓名、开胃菜...
你可以到一个餐馆去仔细研究一下餐馆的业务流程:...顾客来了以后,服务生先给客人找一张桌子坐下来,然后递上菜谱等待顾客点菜,顾客可以点一个菜,也可以退菜,完了之后结账走人,这张桌子又可以用来招待下一批顾客。
从提供的文件名来看,"电子菜谱后台操作界面说明.doc"应详细介绍了如何添加、编辑和删除菜品信息,如何设置菜品分类,以及如何管理订单和库存。"电子菜谱点菜系统说明(详细).doc"则可能涵盖了系统的基本功能、使用...
在IT领域,开发一个模拟点菜系统是常见的实践项目,尤其适合初学者学习编程和软件工程的基础。本系统采用C语言进行编写,C语言是一门基础且强大的编程语言,它提供了底层控制,使得开发者能直接与硬件交互,适合实现...
【模拟点菜(教学用例)】是一...总的来说,“模拟点菜”小程序是一个极好的教学工具,它结合了实际应用场景,帮助初学者以趣味性的方式学习编程,同时也为他们提供了实际项目经验,有助于提升问题解决能力和编程思维。
在点菜、下单和查看订单的过程中,我们需要创建多个活动来表示不同的功能页面,比如菜品列表页、购物车页、订单确认页和订单详情页。每个活动都需要设计合适的布局和交互逻辑。 2. **UI设计**:在Android中,界面...
在大型系统中,为了提高性能,可能会使用多线程技术来处理并发请求,如处理多个顾客同时点餐。初学者可以学习如何在C#中创建和管理线程。 9. 数据绑定: 界面中的控件可能与后台数据源进行绑定,比如菜品列表显示...
MySQL是世界上最流行的开源关系型数据库管理系统,因其高效的性能和易用性而被广泛应用。在点菜系统中,MySQL存储了菜品信息、订单详情、用户数据等关键信息。a.sql文件很可能是数据库的结构定义或初始数据,通过SQL...
此外,为了保证数据的安全性,可能还需要考虑多线程同步、数据库备份等高级特性。 总的来说,C语言实现的OrderDish点菜系统虽然相对基础,但却是一个很好的学习实践案例。它展示了如何利用C语言的基本特性,结合...
可以使用SQLite或SQL Server等数据库存储菜品信息,包括菜品ID、名称、价格、图片等,通过ADO.NET进行数据交互。 2. 搜索与筛选:用户可以通过关键词搜索菜品,系统需提供模糊搜索功能。同时,支持按照价格、口味、...
馆事先准备好自己的招牌菜及一些常规的菜式,有营业场所,服务人员等;顾客 来了以后,服务生先给客人找一张桌子坐下来,然后递上菜谱等待顾客点菜,顾 客可以点一个菜,也可以退菜,完了之后结账走人,这张桌子又...
服务器端的设计通常需要考虑到并发处理能力和数据一致性,可能采用多线程或异步处理机制来优化性能。 “酒水”可能是一个单独的模块,专门处理酒水类产品的点单和服务。这个模块需要特别处理如配杯、瓶装与散装的...
1. **初始化设置**:首次使用需根据《博立点菜机说明书》进行设备激活和菜单导入,确保所有菜品信息正确无误。 2. **电池管理**:点菜宝通常采用可充电电池,注意定期充电,避免因电量不足影响使用。 3. **故障排查*...
总的来说,掌中宝点菜手机点菜系统是通过Java技术和Andriod平台实现的高效餐饮解决方案,结合数据库管理,提供了全面的点餐服务。通过MyEclipse的开发支持,确保了系统的稳定性和用户体验。这款系统对于提升餐饮行业...
总的来说,这个酒店点菜系统是一个适合初学者实践的项目,涵盖了Web开发的基础知识,如ASP.NET框架的应用、数据库操作、前端交互设计以及简单的业务逻辑处理。通过研究和理解这个系统,开发者可以提升自己的编程技能...
数据库方面,点菜系统一般会采用关系型数据库如SQL Server或MySQL来存储菜品信息、订单数据等。C#.NET提供了ADO.NET框架,可以方便地连接和操作数据库,执行查询、插入、更新和删除等操作。在设计数据库时,需要考虑...
"点菜软件点菜宝"是一款专为餐饮行业设计的智能点菜系统,由易石公司开发。易石是一家在餐饮信息化解决...点菜宝的使用不仅提高了点菜效率,减少了顾客等待时间,还能通过数据分析帮助餐厅优化菜品组合,提升经营效益。
蓝牙无线点菜系统是一种高效、便捷的餐饮业管理工具,它利用蓝牙技术实现了餐厅与厨房之间的无缝通信,提升了餐厅的服务质量和效率。以下是对这个系统的详细解释: 1. **蓝牙技术**:蓝牙是一种短距离无线通信技术...