汉堡店中有一个负责做汉堡的厨师,一个负责销售的营业员,用java线程表示他们的营业过程:

问题原型就是生产者与消费者的问题。

首先定义一个汉堡包箱子类与几个相关的变量类:

 public class Ham
{
static Object box=new Object(); //制作汉堡的箱子
static int totalMaterial=6; //制作汉堡的材料的量(10个汉堡)
static int sales=0; //汉堡包的销售量
static int production=3; //汉堡包的产量,光顾之前有3个
}

再来定义厨师类:

 public class HMaker extends Thread {   //厨师类
void make() //制作一个汉堡,通知营业员
{
synchronized(Ham.box)
{
Ham.production++;
System.out.println("厨师:这里有汉堡!!(总"+Ham.production+"个)");
Ham.box.notify(); //通知营业员
}
}
public void run()
{
while(Ham.production<Ham.totalMaterial) //不能超过材料数目
{
try
{
sleep(3000);
}catch(InterruptedException ie){}
make(); //制作一个汉堡
}
}
}

营业员类定义如下:

 public class HAssistant extends Thread{

     void sell()        //销售一个汉堡
{
synchronized(Ham.box)
{
if(Ham.production==Ham.sales)
{
try{
Ham.box.wait(); //没有汉堡了唤醒厨师
}catch(InterruptedException ie){}
}
Ham.sales++;
System.out.println("营业员:顾客朋友们,汉堡上来了.(总"+Ham.sales+"个)");
}
}
public void run()
{
while(Ham.sales<Ham.totalMaterial)
{
System.out.println("<顾客订购汉堡.>");
sell(); //销售汉堡
try{
sleep(1000);
}catch(InterruptedException ie){}
}
}
}

主程序如下:

 public class Synchronization6 {
public static void main(String[] args) {
HMaker maker=new HMaker();
HAssistant assistant=new HAssistant();
maker.start();
assistant.start();
}
}

运行结果:

<顾客订购汉堡.>
营业员:顾客朋友们,汉堡上来了.(总1个)
<顾客订购汉堡.>
营业员:顾客朋友们,汉堡上来了.(总2个)
<顾客订购汉堡.>
营业员:顾客朋友们,汉堡上来了.(总3个)
<顾客订购汉堡.>
厨师:这里有汉堡!!(总4个)
营业员:顾客朋友们,汉堡上来了.(总4个)
<顾客订购汉堡.>
厨师:这里有汉堡!!(总5个)
营业员:顾客朋友们,汉堡上来了.(总5个)
<顾客订购汉堡.>
厨师:这里有汉堡!!(总6个)
营业员:顾客朋友们,汉堡上来了.(总6个)

最新文章

  1. 【Win 10 应用开发】在后台进行多媒体转码
  2. java.lang.NoSuchMethodError: org.apache.xerces.impl.xs.XMLSchemaLoader.loadGrammar
  3. sysbench 安装
  4. 【Android 界面效果33】二级listview列表
  5. 转载:C++ map的基本操作和使用
  6. 流形(Manifold)初步【转】
  7. java操作excel常用的两种方式
  8. Android07-Android广播
  9. C语言总结
  10. socket端口外网无法连接解决方法
  11. 初试 Windows XP Embedded 系统开发1
  12. MEF 基础简介 三
  13. 《剑指offer》第一个只出现一次的字符
  14. JAVA核心技术I---JAVA基础知识(格式化相关类)
  15. jsp界面的继承与否剖析
  16. 基于Centos7.5搭建Docker环境
  17. django笔记 - 建站
  18. Python标准异常和异常处理详解
  19. head first java读书笔记
  20. Sklearn环境搭建与常用包

热门文章

  1. C# 后台调用前台JS
  2. Notepad++使用技法
  3. JS行合并处理方法
  4. java核心技术学习笔记之一程序设计概述
  5. Oracle SQL CPU占用高
  6. 什么是epoll
  7. CCNA实验(3) -- RIP
  8. POJ 3581 Sequence(后缀数组)
  9. tree(简单并差集)
  10. HDU 11488 Hyper Prefix Sets (字符串-Trie树)