并发系列(三)安全队列

1. 安全队列Queue思维导图概览

并发系列(三)安全队列_第1张图片
多线程编程中很多地方都是用到了安全队列,故简单做一个总结概括,方便后面查阅。

2. 分知识点

2.1 安全队列简介

并发系列(三)安全队列_第2张图片
队列这种数据结构不必做过多解释,安全队列的目的在于在多线程中存在消费者生产者模式,即多个生产者(生产者线程)生产东西,多个消费者(消费者线程)进行消费,这时需要一个中间空间去暂存,这时就需要考虑使用安全队列,保证其流程的安全性。

2.2 BlockingQueue阻塞算法

2.2.1 方法介绍

从上到下,依次为,添加,获取,检查

  • 可能抛异常的方法
    在这里插入图片描述

  • 返回布尔值
    在这里插入图片描述

  • 阻塞方法
    在这里插入图片描述

  • 设定等待时间
    在这里插入图片描述

2.2.2 ArrayBlockingQueue

并发系列(三)安全队列_第3张图片

2.2.3LinkedBlockingQueue

并发系列(三)安全队列_第4张图片
BlockingQueue 虽然使用了锁机制,但其底层实质上使用CAS算法。

2.3 ConcurrentLinkedQueue 非阻塞算法

并发系列(三)安全队列_第5张图片
补充:在消费者生产者模式下,有可能消费者不知道什么时候生产者会生产完毕,如果选择阻塞队列通过阻塞方法获取,如果队列中没有元素存在,可能消费者会被一直阻塞,进而无法下面的系列操作。之前查询获得一种解决办法,被称为“毒丸”策略。
在生产者生产结束后,可以加一个特殊的对象(“毒丸”)到队列中,当消费者获取到该对象时,表明队列中已经没有了对象,这时该消费者进行线程结束,并且将该对象加入到队列之中,等待其他消费者线程获取,这样就能依次关闭所有的消费者线程

并发系列(三)安全队列_第6张图片

你可能感兴趣的:(并发)