某个汉堡店有1名厨师,2名营业员A和B,厨师每3秒钟制作一个汉堡,制作完的汉堡放到柜台上,柜台上同时最多放5个汉堡,每当客人购买汉堡时,营业员从柜台上取汉堡,营业员取汉堡的时间为1~4秒随机的。编程实现这个应用,厨师和营业员都用线程实现,并打印出厨师制作汉堡和哪个营业员拿汉堡的提示。

解决方案 »

  1.   

    注意放到同步代码块里 来解决线程安全问题 就题目就没撒难度了不熟悉的话百度下张孝祥JAVA第5课 看看 那课专门讲线程的
      

  2.   


    import java.util.ArrayList;
    import java.util.List;
    import java.util.Random;public class Hamburger {
    private List<String> list = new ArrayList<String>();
    private Random random = new Random(4L);

    class Customer extends Thread{
    private String name;
    public Customer(String name){
    super();
    this.name = name;
    }
    public void run(){
    while(true){
    try {
    sleep((random.nextInt(4)+1)*1000);
    if(list.size()>0){
    list.remove(0);
    System.out.println(name + ": got a hamburger!");
    }else{
    System.out.println(name + ": there is no hamburgers");
    }
    } catch (InterruptedException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }
    }
    }
    class Cooker extends Thread{
    public void run(){
    while(true){
    try {
    sleep(3000);
    if(list.size()<5){
    list.add("hamburger");
    System.out.println("cooker: add a hamburger!");
    }
    } catch (InterruptedException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }
    }
    }

    public static void main(String[] args){
    Hamburger hamburger = new Hamburger();
    Cooker cooker = hamburger.new Cooker();
    Customer customerA = hamburger.new Customer("customerA");
    Customer customerB = hamburger.new Customer("customerB");

    cooker.start();
    customerA.start();
    customerB.start();

    }
    }仅供参考
      

  3.   

    import java.util.ArrayList;
    import java.util.List;
    import java.util.Random;public class Hamburger {
        private List<String> list = new ArrayList<String>();
        private Random random = new Random(4L);
        
        private synchronized void getHamburger(String name)
        {
         if(list.size()>0){
                
                System.out.println(name + ": got a hamburger!");
                list.remove(0);
            }else{
                System.out.println(name + ": there is no hamburgers");
            }
        }
        class Customer extends Thread{
            private String name;
            public Customer(String name){
                super();
                this.name = name;
            }
            public void run(){
                while(true){
                    try {
                        sleep((random.nextInt(4)+1)*1000);
                        getHamburger(name);
                    } catch (InterruptedException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
            }
        }
        class Cooker extends Thread{
            public void run(){
                while(true){
                    try {
                        sleep(3000);
                        if(list.size()<5){
                            list.add("hamburger");
                            System.out.println("cooker: add a hamburger!");
                        }
                    } catch (InterruptedException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
            }
        }
        
        public static void main(String[] args){
            Hamburger hamburger = new Hamburger();
            Cooker cooker = hamburger.new Cooker();
            Customer customerA = hamburger.new Customer("customerA");
            Customer customerB = hamburger.new Customer("customerB");
            
            cooker.start();
            customerA.start();
            customerB.start();
            
        }
    }
    修改楼上
      

  4.   


    package org.leelin.interview;import java.util.ArrayList;
    import java.util.List;
    import java.util.Random;public class ProducerCustomer { public static void main(String[] args) {
    Hamburger h = new Hamburger();
    Cook c = new Cook(h);
    Assistant a1 = new Assistant(h);
    Assistant a2 = new Assistant(h);
    c.start();
    a1.start();
    a2.start();
    }}class Hamburger {
    List<String> list = new ArrayList<String>(); String name; public String getName() {
    return name;
    } public void setName(String name) {
    this.name = name;
    } public  String pop() {
    return (String) list.remove(list.size() - 1);
    } public  void push(String name) {
    list.add(name);
    }
    }class Cook extends Thread {
    private Hamburger h; public Cook(Hamburger h) {
    this.h = h;
    } @Override
    public void run() {
    while (true) {
    synchronized (h) {
    if (h.list.size() >= 0 && h.list.size() <= 4) {
    try {
    Thread.sleep(3000);
    } catch (InterruptedException e) {
    throw new RuntimeException("发生异常");
    }
    String str = "hamburger" + System.currentTimeMillis();
    System.out.println(this.getName() + " cook push the " + str);
    h.push(str);
    }
    yield();
    }
    }
    }
    }class Assistant extends Thread {
    private Hamburger h; public Assistant(Hamburger h) {
    this.h = h;
    } @Override
    public void run() {
    while (true) {
    synchronized (h) {
    if (h.list.size() >= 1) {
    try {
    Thread.sleep((new Random().nextInt(4) + 1) * 1000);
    } catch (InterruptedException e1) {
    throw new RuntimeException("发生异常");
    }
    System.out.println(this.getName() + " assistant pop the "
    + h.pop());
    }
    }
    yield();
    }
    }
    }