美文网首页
生产者与消费者

生产者与消费者

作者: 田真的架构人生 | 来源:发表于2017-08-10 09:37 被阅读0次
    package test.java.util.concurrent;
    
    import java.util.concurrent.ExecutorService;
    import java.util.concurrent.Executors;
    import java.util.concurrent.TimeUnit;
    
    class Meal {
        private final int orderNum;
    
        public Meal(int orderNum) {
            this.orderNum = orderNum;
        }
    
        public String toString() {
            return \"Meal \" + orderNum;
        }
    }
    
    class WaitPerson implements Runnable {
        private Restaurant restaurant;
    
        public WaitPerson(Restaurant r) {
            restaurant = r;
        }
    
        public void run() {
            try {
                while (!Thread.interrupted()) {
                    synchronized (this) {
                        while (restaurant.meal == null) {
                            wait();//...wait the chef to produce a meal
                        }
                    }
                    System.out.println(\"Waitperson got \" + restaurant.meal);
                    synchronized (restaurant.chef) {
                        restaurant.meal = null;
                        restaurant.chef.notifyAll();//ready for another
                    }
                }
            } catch (InterruptedException e) {
                System.out.println(\"Waitperson interrupted\");
            }
        }
    }
    
    class Chef implements Runnable {
        private Restaurant restaurant;
        private int count = 0;
    
        public Chef(Restaurant r) {
            restaurant = r;
        }
    
        public void run() {
            try {
                while (!Thread.interrupted()) {
                    synchronized (this) {
                        while (restaurant.meal != null) {
                            wait();//...for the meal to be taken
                        }
                    }
                    if (++count == 10) {
                        System.out.println(\"Out of food,closing\");
                        restaurant.exec.shutdownNow();
                    }
                    System.out.println(\"Order up! \");
                    synchronized (restaurant.waitPerson) {
                        restaurant.meal = new Meal(count);
                        restaurant.waitPerson.notifyAll();
                    }
                    TimeUnit.MILLISECONDS.sleep(100);
                }
            } catch (InterruptedException e) {
                System.out.println(\"Chef interrupted\");
            }
        }
    }
    
    
    public class Restaurant {
        Meal meal;
        WaitPerson waitPerson = new WaitPerson(this);
        Chef chef = new Chef(this);
        ExecutorService exec = Executors.newCachedThreadPool();
    
        public Restaurant() {
            exec.execute(chef);
            exec.execute(waitPerson);
        }
    
        public static void main(String[] args) {
            new Restaurant();
        }
    }
    

    相关文章

      网友评论

          本文标题:生产者与消费者

          本文链接:https://www.haomeiwen.com/subject/xcgcrxtx.html