生产者消费者模式

2018-05-24  本文已影响0人  Wide_Star

开始


package multithread;

import java.util.LinkedList;
import java.util.List;

public class ProducterAndConsumer {

    static class Storage{
        //仓库最大容量
        private final int MAX_SIZE=10;
        //仓库存储的数据结构:集合
        private List<String> list=new LinkedList<>();
        public synchronized void produce(int i) {
            while(list.size()==MAX_SIZE) {
                System.out.println("仓库已满,暂时不能生产");
                try {
                    wait();
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            String s=i+"";
            list.add(s);
            System.out.println("生产了产品-->"+s);
            notify();
            
        }
        public synchronized void consume() {
            while(list.size()==0) {
                System.out.println("仓库以空,暂时不能消费");
                try {
                    wait();
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            System.out.println("消费了产品-->"+list.remove(list.size()-1));
            notify();
        }
        
    }
    static class Producer implements Runnable
    {
        private Storage s;
        public Producer(Storage s) {
            // TODO Auto-generated constructor stub
            this.s=s;
        }
        @Override
        public void run() {
            // TODO Auto-generated method stub
            for (int i = 0; i < 30; i++) {
                s.produce(i);
            }
        }
        
    }
    static class Consumer implements Runnable{
        private Storage s;
        public Consumer(Storage s) {
            // TODO Auto-generated constructor stub
            this.s=s;
        }
        @Override
        public void run() {
            // TODO Auto-generated method stub
            for(int i=0;i<30;i++) {
                s.consume();
            }
        }
    }
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Storage storage=new Storage();
        new Thread(new Consumer(storage)).start();
        new Thread(new Producer(storage)).start();
    }
}

结束

上一篇下一篇

猜你喜欢

热点阅读