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

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();//空队列条件



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

比特科技软件开发工作室

你的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值