并发系列(三)安全队列

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

在这里插入图片描述
多线程编程中很多地方都是用到了安全队列,故简单做一个总结概括,方便后面查阅。

2. 分知识点

2.1 安全队列简介

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

2.2 BlockingQueue阻塞算法

2.2.1 方法介绍

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

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

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

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

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

2.2.2 ArrayBlockingQueue

在这里插入图片描述

2.2.3LinkedBlockingQueue

在这里插入图片描述
BlockingQueue 虽然使用了锁机制,但其底层实质上使用CAS算法。

2.3 ConcurrentLinkedQueue 非阻塞算法

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

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值