ArrayBlockingQueue :
LinkedBlockingQueue (Integer.MAX_VALUE)
SynchronusQueue(无锁,不存储元素)
ConcurrentLinkedQueue (无锁)
非阻塞,不能用于线程池,线程安全, 无界,入队不用等待
cas(不用切换线程上下文,乐观锁) 长期占用CPU
head
tail :指向最后一个或者倒数第二个节点
平均入队两次tail移动一次,提高性能
1、PriorityBlockingQueue
数组,线程安全,排序(取元素的时候有序,出的是最大或最小,存储没有顺序),无界
comparator:不设置就是自然顺序
扩容释放锁的原因:防止阻塞太多线程,释放锁后,扩容使用自旋保证只有一个线程可以扩容
2、PriorityQueue
非线程安全,数组,无界,
入队不阻塞
3、DelayQueue
阻塞,线程安全
存放的属性必须实现Delayed接口
Delayed : 定义元素的过期时间
基于优先级队列实现
leader : 取元素的时候判断是否为空,不为空有线程阻塞。
4、heap
满(节点数量最大)二叉树:每一层节点的数量都是满的
完全二叉树:除开最后一层,其他层都是满的
堆:顶部元素最大或者最小(小顶堆,大顶堆),
数组第一个元素为空:快速根据子节点的下标快速找到父节点的位置 : index/2 = 父节点下标