美文网首页
java多线程之生产者消费者模式

java多线程之生产者消费者模式

作者: LX_代码制造坊 | 来源:发表于2020-03-11 07:21 被阅读0次

    生产者消费者模式的组成:
    产品:生产者需要生产的产品。
    生产池:根据生产池中产品的数量,确定是否进行生产和消费。
    生产者:只负责给生产池生产产品。
    消费者:只负责从生产池消费产品。

    定义一个产品:

    public class Product {
        private String name;
    
        public Product(String name) {
            this.name = name;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    }
    

    生产池

    public class Productpool {
        private List<Product> productList = null;
        private int maxSize = 0;
    
        public Productpool(int maxSize) {
            this.maxSize = maxSize;
            productList = new LinkedList<Product>();
        }
    
        public synchronized void push(Product product) {
            if (this.productList.size() == maxSize) {
                try {
                    this.wait();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            this.productList.add(product);
            System.out.println("生产了"+product.getName());
            this.notifyAll();
        }
    
        public synchronized Product pop() {
            if (this.productList.size() == 0) {
                try {
                    this.wait();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            Product product = this.productList.remove(0);
            System.out.println("消费了"+product.getName());
            this.notifyAll();
            return product;
        }
    }
    

    生产者:

    public class Producter extends Thread {
        private Productpool productpool = null;
        private int i = 0;
    
        public Producter(Productpool productpool) {
            this.productpool = productpool;
        }
    
        @Override
        public void run() {
            while (true) {
                if (i >= 100) {
                    break;
                }
                String name = ++i + "号产品";
                Product product = new Product(name);
                this.productpool.push(product);
            }
        }
    }
    

    消费者

    public class Comsumer extends Thread {
        private Productpool productpool = null;
    
        public Comsumer(Productpool productpool) {
            this.productpool = productpool;
        }
    
        @Override
        public void run() {
            while (true) {
                Product p = this.productpool.pop();
    
            }
        }
    }
    

    启动类

    public class Progame {
        public static void main(String[] args) {
            Productpool productpool = new Productpool(10);
            new Producter(productpool).start();
            new Comsumer(productpool).start();
        }
    }
    

    相关文章

      网友评论

          本文标题:java多线程之生产者消费者模式

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