阻塞队列(BlockingQueue)

作者: 进击de小黑 | 来源:发表于2018-11-20 17:36 被阅读19次

    BlockingQueue

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

    BlockingQueue的使用说明

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


    20181120.png

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

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

    消费者

    public class Consumer implements Runnable{
    
        private boolean quit;
        private BlockingQueue<String> queue;
    
        public Consumer(BlockingQueue<String> 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<String> queue;
    
        public Producer(BlockingQueue<String> queue) {
            this.queue = queue;
        }
    
        @Override
        public void run() {
            try {
                queue.put("1");
                queue.put("2");
    
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    
    }
    

    相关文章

      网友评论

        本文标题:阻塞队列(BlockingQueue)

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