简单生产者消费者

使用Blockingquene的生产者消费者模型

生产者

public class Producer implements Runnable{
    BlockingQueue queue ;

    public Producer(BlockingQueue<String> queue){
        this.queue = queue;
    }

    @Override
    public void run() {
        try {
            String temp = "A product由生产线程:"+Thread.currentThread().getName();
            System.out.println("i have a product:"+Thread.currentThread().getName());
            queue.put(temp);//塞不下时会阻塞
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

消费者

public class Consumer implements Runnable{
    BlockingQueue<String> queue;

    public Consumer(BlockingQueue<String> queue){
        this.queue = queue;
    }
    @Override
    public void run() {
        try {
            String temp = queue.take();//空了的时候也会阻塞
            System.out.println("消费了"+temp);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}    

TestResult

public class TestProducerAndConsumer {
    public static void main(String[] args) {
        BlockingQueue<String> queue = new LinkedBlockingDeque<>(2);
        Consumer consumer = new Consumer(queue);
        Producer producer = new Producer(queue);
        for (int i=0;i<5;i++){
            new Thread(producer,"Producer"+(i+1)).start();
            new Thread(consumer,"Consumer"+(i+1)).start();
        }
    }
}

0%