您的位置:首页 > 编程语言 > Java开发

JDK源码分析之DelayQueue无边界阻塞队列类

2017-08-14 15:41 681 查看
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();//空队列条件
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: