DelayQueue是一个延迟队列
队列中的元素需实现Delayed接口 Delayed实现了ComparTo
getDelay 返回元素剩余的时间
compareTo 比较器
这样一个队列我们关心是如何实现延迟?
实际上在offer的时候会加锁 ReentrantLock
如果是第一个元素会放到【0】的位置
如果不是新加的元素就会和前一个元素比较,如果时间小于前一个节点就会和前一个节点换位置,否则就会放到目前节点。
take元素会从第一个拿,因为入队已经是排好序的了,同时也会加锁,如果没有过期的元素就会阻塞,使用的lockSupport.parkNanos(thread,blockTime); 当前线程,和挂起时间