1. 安全队列Queue思维导图概览
多线程编程中很多地方都是用到了安全队列,故简单做一个总结概括,方便后面查阅。
2. 分知识点
2.1 安全队列简介
队列这种数据结构不必做过多解释,安全队列的目的在于在多线程中存在消费者生产者模式,即多个生产者(生产者线程)生产东西,多个消费者(消费者线程)进行消费,这时需要一个中间空间去暂存,这时就需要考虑使用安全队列,保证其流程的安全性。
2.2 BlockingQueue阻塞算法
2.2.1 方法介绍
从上到下,依次为,添加,获取,检查
-
可能抛异常的方法
-
返回布尔值
-
阻塞方法
-
设定等待时间
2.2.2 ArrayBlockingQueue
2.2.3LinkedBlockingQueue
BlockingQueue 虽然使用了锁机制,但其底层实质上使用CAS算法。
2.3 ConcurrentLinkedQueue 非阻塞算法
补充:在消费者生产者模式下,有可能消费者不知道什么时候生产者会生产完毕,如果选择阻塞队列通过阻塞方法获取,如果队列中没有元素存在,可能消费者会被一直阻塞,进而无法下面的系列操作。之前查询获得一种解决办法,被称为“毒丸”策略。
在生产者生产结束后,可以加一个特殊的对象(“毒丸”)到队列中,当消费者获取到该对象时,表明队列中已经没有了对象,这时该消费者进行线程结束,并且将该对象加入到队列之中,等待其他消费者线程获取,这样就能依次关闭所有的消费者线程。