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();//空隊列條件



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章