Java并发源码:阻塞队列实现之DelayQueue源码解析,mysql实战45讲百度云下载

// 独占锁实现同步

private final transient ReentrantLock lock = new ReentrantLock();

// 优先队列存放数据

private final PriorityQueue q = new PriorityQueue();

/**

  • 基于Leader-Follower模式的变体,用于尽量减少不必要的线程等待

*/

private Thread leader = null;

/**

  • 与lock对应的条件变量

*/

private final Condition available = lock.newCondition();

}

  1. 使用ReentrantLock独占锁实现线程同步,使用Condition实现等待通知机制。

  2. 基于Leader-Follower模式的变体,减少不必要的线程等待。

  3. 内部使用PriorityQueue优先级队列存储元素,且队列中元素必须实现Delayed接口。

Delayed接口

=============

队中的元素必须实现Delayed接口【Delay接口又继承了Comparable,需要实现compareTo方法】,每个元素都需要指明过期时间,通过getDelay(unit)获取元素剩余时间【剩余时间 = 到期时间 - 当前时间】。

每次向优先队列中添加元素时根据compareTo方法作为排序规则,当然我们约定一下,默认q.peek()出来的就是最先过期的元素。

你可能感兴趣的:(程序员,面试,java,后端)