DelayQueue类是一个无边界的阻塞队列类,线程安全类,它内部维护的是一个PriorityQueue类对象,PriorityQueue是一个无边界的队列类,但不是线程安全,即不会使用在
阻塞队列使用的场景中。DelayQueue类的核心技术就是使用PriorityQueue类对象和同步处理工具ReentrantLock类和ConditionObject类,这两者的结合使得DelayQueue阻塞类
既有线程安全能力也有队列功能。
ReentrantLock类对象保证了队列资源的线程安全,但是在我们之前学过的阻塞队里类中都会有两个ConditionObject类对象分别是队列为空和满队列条件。但是在DelayQueue
类中只有空队列条件,这是因为DelayQueue是一个无边界的线程安全类。所以不需要满队列条件。
关于ReentrantLock类的原理和源码分析请看博主之前的博客文章,这里不再赘述。
想要了解DelayQueue类的实际使用的业务场景请看下面两篇较好的博客文章
1. 考试场景: 学生,老师等 http://ideasforjava.iteye.com/blog/657384
2. 第一种场景的补偿及具有过期时间的缓存 http://www.cnblogs.com/sunzhenchao/p/3515085.html
这两个例子对于DelayQueue类的使用十分清楚。
DelayQueue类的属性源码展示:
public class DelayQueue<E extends Delayed> extends AbstractQueue<E>
implements BlockingQueue<E> {
private transient final ReentrantLock lock = new ReentrantLock();//资源多线程同步锁
private final PriorityQueue<E> q = new PriorityQueue<E>();//无界队列对象
private Thread leader = null;
private final Condition available = lock.newCondition();//空队列条件
本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。