DelayQueue

 1、结构

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

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

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

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

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

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

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

    

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

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

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

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

take操作会阻塞。

原文地址:https://www.cnblogs.com/YDDMAX/p/5644055.html