DelayQueue

时间:2023-02-15 06:57:07

1、结构

使用的是PriorityQueue来作为底层的存储

元素需要实现Delayed接口,该接口继承了comparable接口

DelayQueue的队头元素是根据comparable排在队首的元素

无论是入队还是出队都是先加锁,也就是异步进行的。

2、add,put,offer操作底层都是调的offer。

offer操作因为加锁是异步进行的,而且发现加入后的元素是自己的时候进行signal(),而不是signalAll()

为什么调用signal?出队的操作没有await

DelayQueue

3、remove,poll,peek,take都会加锁

remove  操作不管时间是否已经到了,都会删除.

poll操作只有delay到了才会删除。

peek也加锁,但是不会判断是否已经到delay时间,只是调priorityQueue.peek()。

take操作会阻塞。

DelayQueue