1.7 KiB
1.7 KiB
ConfurrentLinkedQueue
线程安全的无界非阻塞队列,底层使用单向链表实现,入队和出队使用 CAS 实现线程安全
- offer 操作,在队列末尾添加一个元素
- add 操作,在链表末尾添加一个元素,内部调用的是 offer
- poll 操作,在队列头部获取并移除一个元素,为空返回 null
- peek 操作,获取头部元素,只获取不移除
- size 操作,计算当前元素个数,并发下不精确
- remove 操作,队列里存在就删除,存在多个删除第一个
- contains 操作,判断队列里是否含有指定对象
LinkedBlockingQueue
使用独占锁实现,有界链表的阻塞队列
- offer
- put,向队列尾部插入一个元素
- poll
- peek
- take,获取当前头部元素并从队列里移除
- remove
- size
ArrayBlockingQueue
使用有界数组实现的阻塞队列,构造函数必须传入队列大小
- offer
- put
- poll
- take
- peek
- size
PriorityBlockingQueue
带优先级的无界阻塞队列,每次出队返回优先级最高或最低的元素,内部使用平衡二叉树堆实现,直接遍历不保证有序性
- offer
- poll,获取队列内部堆树的根节点元素
- put
- take,获取队列内部堆树的根节点元素
- size,返回前加锁,保证不会有其他入队出队操作
DelayQueue
无界阻塞延迟队列,每个元素都有过期时间,获取元素时只有过期元素会出队列,队列头元素时最快要过期的元素
- offer
- take,获取并移除队列里延迟时间过期的元素,没有则等待
- poll,获取并移除队列头过期元素,没有返回 null
- size,计算过期和没过期的元素个数