阻塞队列(BlockingQueue)

BlockingQueue

在java.util.concurrent包中的 BlockingQueue接口类是一种线程安全的队列。通过ReentrantLock实现线程安全,通过Condition实现阻塞和唤醒

BlockingQueue的使用说明

BlockingQueue一般用于这样的场景:一个线程生产对象,另一个线程来消耗对象,


20181120.png

生产线程会持续生产新的对象并把他们插入到队列中,直到队列所能包含对象的最大上限。
如果阻塞队列到达了上限,这时如果尝试插入新的的对象,生产线程将会被阻塞。并且阻塞会一直保持直到消费线程从队列中取出一个对象。

同样,消费线程会持续从阻塞队列中取出对象并处理他们。如果消费线程试图从一个空的队列中取出对象,消费线程将被阻塞住,直到生产线程向队列中加入了一个对象。

消费者

public class Consumer implements Runnable{

    private boolean quit;
    private BlockingQueue queue;

    public Consumer(BlockingQueue queue) {
        this.queue = queue;
    }

    @Override
    public void run() {
        while (quit){
            try {
                String take = queue.take();


            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

}

生产者

public class Producer implements Runnable {

    private BlockingQueue queue;

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

    @Override
    public void run() {
        try {
            queue.put("1");
            queue.put("2");

        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

}

你可能感兴趣的:(阻塞队列(BlockingQueue))