zoukankan      html  css  js  c++  java
  • 队列

    public class Toast {                        
                                                
        public enum Status {                    
            DRY, BUTTERED, JAMED                
        };                                      
                                                
        private Status status = Status.DRY;     
        private final int id;                   
                                                
        public Toast(int id) {                  
            this.id = id;                       
        }                                       
                                                
        public void butter() {                  
            status = Status.BUTTERED;           
        }                                       
                                                
        public void jam() {                     
            status = Status.JAMED;              
        }                                       
                                                
        public Status getStatus () {            
            return status;                      
        }                                       
                                                
        public int getId() {                    
            return id;                          
        }                                       
                                                
        public String toString() {              
             return "Toast--"+id+":"+status;    
        }                                       
    }                                           
    public class ToastQueue extends LinkedBlockingQueue<Toast>{
        private static final long serialVersionUID = -5810260681478300825L;
    
    }
    public class Toaster implements Runnable {
        private ToastQueue toastQueue;
        public Toaster(ToastQueue toastQueue) {
            this.toastQueue = toastQueue;
        }
        private int count = 0;
        private Random random = new Random(47);
        @Override
        public void run() {
            try {
                while (!Thread.interrupted()) {
                    TimeUnit.MILLISECONDS.sleep(100+random.nextInt(2000));
                    
                    Toast t = new Toast(count++);//生产吐司
                    System.out.println(t);
                    toastQueue.put(t); //加入到第一步
    
                }
            } catch (InterruptedException e) {
                System.out.println("toaster.....");
            }
            System.out.println("toaster off!");
        }
    }
    public class Butter implements Runnable{
        private ToastQueue dayQueue,butterQueue;
        public Butter(ToastQueue dayQueue,ToastQueue butterQueue) {
            this.dayQueue = dayQueue;
            this.butterQueue = butterQueue;
        }
        @Override
        public void run() {
            try {
                while (!Thread.interrupted()) {
                    Toast t = dayQueue.take(); //从第一步处理中获取过来
                    t.butter(); //改变状态
                    System.out.println(t);
                    butterQueue.put(t); //加入到第二步
                    
                }
            } catch (InterruptedException e) {
                System.out.println("butter....");
            }
            System.out.println("butter off!");
        }
    
    }
    public class Jam implements Runnable {
        private ToastQueue butterQueue, finishQueue;
        public Jam(ToastQueue butterQueue, ToastQueue finishQueue) {
            this.butterQueue = butterQueue;
            this.finishQueue = finishQueue;
        }
    
        @Override
        public void run() {
            try {
                while (!Thread.interrupted()) {
                    Toast t = butterQueue.take();// 从第二步中获取到吐司
                    t.jam(); // 改变状态
                    System.out.println(t);
                    finishQueue.put(t);// 加入到第三步
    
                }
            } catch (InterruptedException e) {
                System.out.println("jam...");
            }
            System.out.println("Jam off!");
        }
    }
    public class Eater implements Runnable{
    
        private ToastQueue finishQueue;
        private int counter = 0 ;
        public Eater (ToastQueue finishQueue) {
            this.finishQueue = finishQueue;
        }
        
        @Override
        public void run() {
            try {
                while (!Thread.interrupted()) {
                    Toast t =  finishQueue.take();
                    if (t.getId() != counter++ || t.getStatus() != Toast.Status.JAMED) {
                        System.out.println(">>>error:" +t);
                        System.exit(1);
                    } else {
                        System.out.println("over! " + t);
                    }
                    
                }
            } catch (InterruptedException e) {
                System.out.println("eater....");
            }
            System.out.println("Eater off!");
        }
    
    }
    public class Main {
    
        public static void main(String[] args) {
            ToastQueue dryQueue = new ToastQueue();
            ToastQueue butterQueue =new ToastQueue();
            ToastQueue finishQueue = new ToastQueue();
            ExecutorService exec = Executors.newCachedThreadPool();
            try {
                exec.execute(new Toaster(dryQueue));
                exec.execute(new Butter(dryQueue,butterQueue));
                exec.execute(new Jam(butterQueue,finishQueue));
                exec.execute(new Eater(finishQueue));
                TimeUnit.MILLISECONDS.sleep(1000000);//不能太小
                exec.shutdownNow();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
  • 相关阅读:
    【MM系列】SAP 关于物料间的替代问题
    【MM系列】SAP MM模块-配置PO的创建时间
    为什么需要分布式配置中心?
    基于Redis的Spring cache 缓存介绍
    史上最全面的Spring-Boot-Cache使用与整合
    负载均衡
    分布式架构的演进
    9种高性能可用高并发的技术架构
    微服务写的最全的一篇文章
    Java设计模式——合成/聚合复用原则
  • 原文地址:https://www.cnblogs.com/Mustr/p/7182320.html
Copyright © 2011-2022 走看看