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

生产者和消费者

作者: 星林的窗 | 来源:发表于2020-05-07 10:37 被阅读0次
    public static void main(String[] args) {
            ArrayList<Integer> productList = new ArrayList<>();
            ExecutorService executorService = Executors.newFixedThreadPool(15);
            for (int i = 0; i < 5; i++) {
                 executorService.submit(new Productor(productList, 8));
            }
            for (int i = 0; i < 10; i++) {
                 executorService.submit(new Consumer(productList));
            }
        }
    
    class Consumer implements Runnable {
        private List<Integer> mProductList;
    
        public Consumer(List<Integer> mProductList) {
            this.mProductList = mProductList;
        }
    
        @Override
        public void run() {
            while (true) {
                synchronized (mProductList) {
                    try {
                        while (mProductList.isEmpty()) {
                            mProductList.wait();
                        }
                        int product = mProductList.remove(0);
                        System.out.println("consume product:" + product);
                        mProductList.notifyAll();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }
    
    class Productor implements Runnable {
        private List<Integer> mProductList;
        private int maxSize;
    
        public Productor(List<Integer> mProductList, int maxSize) {
            this.mProductList = mProductList;
            this.maxSize = maxSize;
        }
    
        @Override
        public void run() {
            while (true) {
                synchronized (mProductList) {
                    try {
                        while (mProductList.size() == maxSize) {
                            mProductList.wait();
                        }
                        Random random = new Random();
                        int product = random.nextInt();
                        mProductList.add(product);
                        System.out.println("produce product:" + product);
                        mProductList.notifyAll();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }
    

    相关文章

      网友评论

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

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