聊聊Java中的并发队列

本文主要总体的说一说各种并发队列 首先来一张全体照

从有界无界上分 常见的有界队列为

    ArrayBlockingQueue 基于数组实现的阻塞队列 LinkedBlockingQueue 其实也是有界队列,但是不设置大小时就时Integer.MAX_VALUE,内部是基于链表实现的 ArrayBlockingQueue 与 LinkedBlockingQueue 对比一哈 ArrayBlockingQueue 实现简单,表现稳定,添加和删除使用同一个锁,通常性能不如后者 LinkedBlockingQueue 添加和删除两把锁是分开的,所以竞争会小一些 SynchronousQueue 比较奇葩,内部容量为零,适用于元素数量少的场景,尤其特别适合做交换数据用,内部使用 队列来实现公平性的调度,使用栈来实现非公平的调度,在Java6时替换了原来的锁逻辑,使用CAS代替了 上面三个队列他们也是存在共性的 put take 操作都是阻塞的 offer poll 操作不是阻塞的,offer 队列满了会返回false不会阻塞,poll 队列为空时会返回null不会阻塞 补充一点,并不是在所有场景下,非阻塞都是好的,阻塞代表着不占用CPU,在有些场景也是需要阻塞的,put take 存在必有其存在的必然性

常见的无界队列

经验分享 程序员 微信小程序 职场和发展