zoukankan      html  css  js  c++  java
  • 生产者消费者模型

    1.篮子

    package queue.test;
    
    import java.util.concurrent.BlockingQueue;
    import java.util.concurrent.LinkedBlockingQueue;
    
    public class Basket {
    
        BlockingQueue<String> basket = new LinkedBlockingQueue<String>(3);
        
        public void produce() throws InterruptedException
        {
            basket.put("apple");
        }
        
        public String consume() throws InterruptedException
        {
            return basket.take();
        }
    }

    2.生产者

    package queue.test;
    
    public class Producer implements Runnable{
    
        private String instance;
        private Basket basket;
    
        public Producer(String instance, Basket basket) {
            super();
            this.instance = instance;
            this.basket = basket;
        }
    
        @Override
        public void run() {
            // TODO Auto-generated method stub
            while(true)
            {
                System.out.println("produce apple start-"+instance);
                try 
                {
                    basket.produce();
                    System.out.println("produce apple end-"+instance);
                    Thread.sleep(300);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
    
    }

    3.消费者

    package queue.test;
    
    public class Consumer implements Runnable{
    
        private String instance;
        private Basket basket;
        
        public Consumer(String instance, Basket basket) {
            super();
            this.instance = instance;
            this.basket = basket;
        }
    
        @Override
        public void run() {
            // TODO Auto-generated method stub
            while(true)
            {
                System.out.println("consumer start-"+instance);
                try {
                    basket.consume();
                    
                    System.out.println("consumer end-"+instance);
                    
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
    
    }

    3.测试

    package queue.test;
    
    import java.util.concurrent.ExecutorService;
    import java.util.concurrent.Executors;
    
    public class QueueTest {
    
        public static void main(String[] args) {
            Basket basket = new Basket();
            
            Producer p1 = new Producer("p1", basket);
            Producer p2 = new Producer("p2", basket);
            Consumer c = new Consumer("c1", basket);
            
            ExecutorService pool = Executors.newCachedThreadPool();
            pool.submit(p1);
            pool.submit(p2);
            pool.submit(c);
        }
    
    }
  • 相关阅读:
    Flask-SQLAlchemy 学习总结
    ubuntu安装redis
    PostgreSQL在Ubuntu上安装指南
    Linux(Ubuntu)下MySQL的安装与配置
    python wechat_sdk间接性的出现错误OfficialAPIError: 40001,说access_token已过期或者不是最新的。
    django不要设置datetime字段auto_now=True
    python 装饰器和 functools 模块
    关于 Python Iterator 协议的一点思考
    python中的enumerate函数
    8 种常被忽视的 SQL 错误用法
  • 原文地址:https://www.cnblogs.com/Android9527/p/5407340.html
Copyright © 2011-2022 走看看