• java线程学习——汉堡销售问题


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

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

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

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

    再来定义厨师类:

     1 public class HMaker extends Thread {   //厨师类
     2      void make()                       //制作一个汉堡,通知营业员
     3      {
     4          synchronized(Ham.box)
     5          {
     6              Ham.production++;
     7              System.out.println("厨师:这里有汉堡!!(总"+Ham.production+"个)");
     8              Ham.box.notify();         //通知营业员
     9          }
    10      }
    11      public void run()
    12      {
    13          while(Ham.production<Ham.totalMaterial)  //不能超过材料数目
    14          {
    15              try
    16              {
    17                  sleep(3000);
    18              }catch(InterruptedException ie){}
    19              make();                             //制作一个汉堡
    20          }
    21      }
    22 }

    营业员类定义如下:

     1 public class HAssistant extends Thread{
     2     
     3     void sell()        //销售一个汉堡
     4     {
     5         synchronized(Ham.box)
     6         {
     7             if(Ham.production==Ham.sales)
     8             {
     9                 try{
    10                 Ham.box.wait();           //没有汉堡了唤醒厨师
    11                 }catch(InterruptedException ie){}
    12             }
    13             Ham.sales++;
    14             System.out.println("营业员:顾客朋友们,汉堡上来了.(总"+Ham.sales+"个)");
    15         }
    16     }
    17     public void run()
    18     {
    19         while(Ham.sales<Ham.totalMaterial)
    20         {
    21             System.out.println("<顾客订购汉堡.>");
    22             sell();                            //销售汉堡
    23             try{
    24                 sleep(1000);
    25             }catch(InterruptedException ie){}
    26         }
    27     }
    28 }

    主程序如下:

    1 public class Synchronization6 {
    2     public static void main(String[] args) {
    3         HMaker maker=new HMaker();
    4         HAssistant assistant=new HAssistant();
    5         maker.start();
    6         assistant.start();
    7     }
    8 }

    运行结果:

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

  • 相关阅读:
    python学习(一)
    Ubuntu安装git
    HashMap源码分析
    nginx加密,访问接口认证
    MD5加密加盐
    xml转对象,对象转xml工具类
    java将对象转map,map转对象工具类
    阿里备战--面试搜集
    java将秒转换为时分秒工具类
    Spring和SpringMvc详细讲解
  • 原文地址:https://www.cnblogs.com/sunrunzhi/p/3418974.html
Copyright © 2020-2023  润新知