![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
阻塞队列 BlockingQueue 接口
文章平均质量分 86
BlockingQueue 是线程安全的,我们在很多场景下都可以利用线程安全的队列来优雅地解决我们业务自身的线程安全问题。
Ssssongsmith 奕飞
这个作者很懒,什么都没留下…
展开
-
38-如何选择适合自己的阻塞队列?
他山之石,可以攻玉。对于如何选择最合适的阻塞队列这个问题,实际上线程池已经率先给我们做了表率。线程池有很多种,不同种类的线程池会根据自己的特点,来选择适合自己的阻塞队列。 所以我们就首先来回想一下这些非常经典的线程池是如何挑选阻塞队列的,借鉴它们的经验之后,我们再去总结一套规则,来归纳出自己在选取阻塞队列时可以对哪些点进行考虑。 线程池对于阻塞队列的选择 下面我们来看线程池的选择要诀。上面表格左侧是线程池,右侧为它们对应的阻塞队列,你可以看到 5 种线程池只对应了 3 种阻塞队列,下面我们对它们进行逐一的原创 2021-01-06 22:35:54 · 414 阅读 · 2 评论 -
37-阻塞和非阻塞队列的并发安全原理是什么?
之前我们探究了常见的阻塞队列的特点,在次,我们以 ArrayBlockingQueue 为例,首先分析 BlockingQueue 即阻塞队列的线程安全原理,然后再看看它的兄弟——非阻塞队列的并发安全原理。通过本次分享的学习,我们就可以了解到关于并发队列的底层原理了。 ArrayBlockingQueue 源码分析 我们首先看一下 ArrayBlockingQueue 的源码,ArrayBlockingQueue 有以下几个重要的属性: // 用于存放元素的数组 final Object[] items;原创 2021-01-05 23:34:46 · 196 阅读 · 4 评论 -
36-有哪几种常见的阻塞队列?
BlockingQueue 接口的实现类都被放在了 J.U.C 包中,将对常见的和常用的实现类进行介绍,包括 ArrayBlockingQueue、LinkedBlockingQueue、SynchronousQueue、PriorityBlockingQueue,以及 DelayQueue。 ArrayBlockingQueue 让我们先从最基础的 ArrayBlockingQueue 说起。ArrayBlockingQueue 是最典型的有界队列,其内部是用数组存储元素的,利用 ReentrantLoc原创 2021-01-03 22:24:58 · 176 阅读 · 0 评论 -
35-阻塞队列包含哪些常用的方法?add、offer、put 等方法的区别?
把 BlockingQueue 中最常用的和添加、删除相关的 8 个方法列出来,并且把它们分为三组,每组方法都和添加、移除元素相关。 这三组方法由于功能很类似,所以比较容易混淆。它们的区别仅在于特殊情况:当队列满了无法添加元素,或者是队列空了无法移除元素时,不同组的方法对于这种特殊情况会有不同的处理方式: 抛出异常:add、remove、element 返回结果但不抛出异常:offer、poll、peek 阻塞:put、take 第一组:add、remove、element add 方法 add 方法是原创 2021-01-02 22:20:01 · 768 阅读 · 3 评论 -
34-什么是阻塞队列?
阻塞队列的作用 阻塞队列,也就是 BlockingQueue,它是一个接口,如代码所示: public interface BlockingQueue<E> extends Queue<E>{...} BlockingQueue 继承了 Queue 接口,是队列的一种。Queue 和 BlockingQueue 都是在 Java 5 中加入的。 BlockingQueue 是线程安全的,我们在很多场景下都可以利用线程安全的队列来优雅地解决我们业务自身的线程安全问题。比如说,使用生产原创 2021-01-01 00:26:06 · 152 阅读 · 0 评论