Java生产者/消费者模型

package gj.concurrent.customerproducer;

import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;

/**
 * Author: areful
 */
public class ProducerConsumerSample {
    private static class Producer implements Runnable {
        private final BlockingQueue<Object> queue;

        private Producer(BlockingQueue<Object> q) {
            queue = q;
        }

        public void run() {
            try {
                while (true) {
                    queue.put(produce());
                }
            } catch (InterruptedException ex) {
                ex.printStackTrace();
            }
        }

        private Object produce() {
            return "producing a new object: " + new Object();
        }
    }

    private static class Consumer implements Runnable {
        private final BlockingQueue queue;

        private Consumer(BlockingQueue q) {
            queue = q;
        }

        public void run() {
            try {
                while (true) {
                    consume(queue.take());
                }
            } catch (InterruptedException ex) {
                ex.printStackTrace();
            }
        }

        private void consume(Object x) {
            System.out.println("consuming object: " + x);
        }
    }

    public static void main(String[] args) {
        BlockingQueue<Object> q = new ArrayBlockingQueue<>(10);
        Producer p = new Producer(q);
        Consumer c1 = new Consumer(q);
        Consumer c2 = new Consumer(q);
        new Thread(p).start();
        new Thread(c1).start();
        new Thread(c2).start();
    }
}

  

原文地址:https://www.cnblogs.com/areful/p/10395793.html