<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    xylz,imxylz

    關注后端架構、中間件、分布式和并發編程

       :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      111 隨筆 :: 10 文章 :: 2680 評論 :: 0 Trackbacks

    Queue是JDK 5以后引入的新的集合類,它屬于Java Collections Framework的成員,在Collection集合中和List/Set是同一級別的接口。通常來講Queue描述的是一種FIFO的隊列,當然不全都是,比如PriorityQueue是按照優先級的順序(或者說是自然順序,借助于Comparator接口)。

    下圖描述了Java Collections Framework中Queue的整個家族體系。

    對于Queue而言是在Collection的基礎上增加了offer/remove/poll/element/peek方法,另外重新定義了add方法。對于這六個方法,有不同的定義。

    拋出異常

    返回特殊值

    操作描述

    插入

    add(e)

    offer(e)

    將元素加入到隊列尾部

    移除

    remove()

    poll()

    移除隊列頭部的元素

    檢查

    element()

    peek()

    返回隊列頭部的元素而不移除此元素

    特別說明的是對于Queue而言,規范并沒有規定是線程安全的,為了解決這個問題,引入了可阻塞的隊列BlockingQueue。對于BlockingQueue而言所有操作的是線程安全的,并且隊列的操作可以被阻塞,直到滿足某種條件。Queue的另一個子接口Deque描述的是一個雙向的隊列。與Queue不同的是,Deque允許在隊列的頭部增加元素和在隊列的尾部刪除元素。也就是說Deque是一個雙向隊列。二者功能都有的隊列就是BlockingDeque,這種阻塞隊列允許在隊列的頭和尾部分別操作元素,應該說是Queue中功能最強大的實現。

     

    image

    在JDK 5之前LinkedList就已經存在,而且本身實現都是一種雙向隊列。所以到了JDK 5以后就將LinkedList同時實現Deque接口,這樣LinkedList就又屬于Queue的一部分了。

    通常情況下Queue都是靠鏈表結構實現的,但是鏈表意味著有一些而外的引用開銷,如果是雙向鏈表開銷就更大了。所以為了節省內存,一種方式就是使用固定大小的數組來實現隊列。在這種情況下隊列的大小是固定,元素的遍歷通過數組的索引進行,很顯然這是一種雙向鏈表的模型。ArrayDeque就是這樣一種實現。

    另外ArrayBlockingQueue也是一種數組實現的隊列,但是卻沒有改造成雙向,僅僅實現了BlockingQueue的模型。理論上和ArrayDeque一樣也應該容易改造成雙向的實現。

    PriorityQueue和PriorityBlockingQueue實現了一種排序的隊列模型。這很類似與SortedSet,通過隊列的Comparator接口或者Comparable元素來排序元素。這種情況下元素在隊列中的出入就不是按照FIFO的形式,而是根據比較后的自然順序來進行。

    CocurrentLinkedQueue是一種線程安全卻非阻塞的FIFO隊列,這種隊列通常實現起來比較簡單,但是卻很有效。在接下來的章節會詳細的描述它。

    SynchronousQueue是一種特別的BlockingQueue,它只是把一個add/offer操作的元素直接移交給remove/take操作。也就是說它本身不會緩存任何元素,所以嚴格意義上說來講并不是一種真正的隊列。此隊列維護一個線程列表,這些線程等待從隊列中加入元素或者移除元素。簡單的說,至少有一個remove/take操作時add/offer操作才能成功,同樣至少有一個add/offer操作時remove/take操作才能成功。這是一種雙向等待的隊列模型,出隊列等待加入等列,而入隊列又等待出隊列。這種隊列的好處在于能夠最大線程的保持吞吐量卻又是線程安全的。所以對于一個需要快速處理的任務隊列,SynchronousQueue是一個不錯的選擇。

     

    BlockingQueue還有一種實現DelayQueue,這種實現允許每一個元素(Delayed)帶有一個延時時間,當調用take/poll的時候會檢測隊列頭元素這個時間是否<=0,如果滿足就是說已經超時了,那么此元素就可以被移除了,否則就會等待。特別說明的是這個頭元素應該是最先被超時的元素(這個時間是絕對時間)。這個類設計很巧妙,被用于ScheduledFutureTask來進行定時操作。希望后面會開辟一個章節講講這里面的想法。實在不行在講線程池部分肯定會提到這個。

     

     



    ©2009-2014 IMXYLZ |求賢若渴
    posted on 2010-07-21 12:21 imxylz 閱讀(21455) 評論(5)  編輯  收藏 所屬分類: Java Concurrency

    評論

    # re: 深入淺出 Java Concurrency (19): 并發容器 part 4 并發隊列與Queue簡介 2010-07-21 12:46 zhxia
    e vais résumer mes recherches et ce que j'ai fait:
    Pour commencer j'ai windows XP et mon but et de pouvoir créer un custom widget, le prendre dans le designer, le déposer sur une QDialog et que le tout se lance.
    Je pars sur un custom widget simple et un qdialog simple c'est a dire je crée des nouveaux projets dans QtCreator sans modifier les fichiers générés. (un Qt Custom Designer Widget et un Qt Gui Application avec une class base QDialog)http://www.jeansclothingstore.com/  回復  更多評論
      

    # re: 深入淺出 Java Concurrency (19): 并發容器 part 4 并發隊列與Queue簡介 2010-07-21 12:47 schmuck
    e vais résumer mes recherches et ce que j'ai fait:
    Pour commencer j'ai windows XP et mon but et de pouvoir créer un custom widget, le prendre dans le designer, le déposer sur une QDialog et que le tout se lance.

      回復  更多評論
      

    # re: 深入淺出 Java Concurrency (19): 并發容器 part 4 并發隊列與Queue簡介 2010-07-21 12:48 links of london charms
    A ce moment là je dois dire que je pense que c'est gagné, je place mon widget dans ma fenêtre, je lance la compilation erreur trouve pas les .h du widget, j'ajoute dans le pro INCLUDEPATH += chemin des headers du custom je relance et la j'ai   回復  更多評論
      

    # re: 深入淺出 Java Concurrency (19): 并發容器 part 4 并發隊列與Queue簡介 2010-07-21 12:49 links of london bracelets
    aut il ajouter d'autres options dans les pro du widget ou du qdialog ?
    Existe t'il un tutorial qui explique comment faire ça avec QtCreator 2 ?
      回復  更多評論
      

    # re: 深入淺出 Java Concurrency (19): 并發容器 part 4 并發隊列與Queue簡介 2011-07-27 12:16 ikon
    jdk1.6下 ConcurrentLinkedQueue 的add 和 offer一樣了;add直接調用了offer方法。

      回復  更多評論
      


    ©2009-2014 IMXYLZ
    主站蜘蛛池模板: 亚洲欧洲无码一区二区三区| 亚洲尹人香蕉网在线视颅| 456亚洲人成影院在线观| 麻豆国产精品免费视频| 自怕偷自怕亚洲精品| 8x成人永久免费视频| 4480yy私人影院亚洲| 国产在线jyzzjyzz免费麻豆| 亚洲一区二区三区免费在线观看| 久久久高清免费视频 | 两个人看的www免费| 久久精品国产亚洲7777| 中文字幕a∨在线乱码免费看| 亚洲精品无码高潮喷水在线| 免费人成视频在线观看网站| 亚洲成人免费在线观看| 性色av无码免费一区二区三区| 亚洲爆乳无码精品AAA片蜜桃| 四虎AV永久在线精品免费观看| 一级毛片aa高清免费观看| 国产亚洲精久久久久久无码AV| 十八禁在线观看视频播放免费| 久久青青草原亚洲AV无码麻豆 | 亚洲人xxx日本人18| 免费国产不卡午夜福在线 | 一级毛片a免费播放王色电影 | 亚洲人片在线观看天堂无码| 免费国产真实迷j在线观看| jyzzjyzz国产免费观看| 久久亚洲国产成人精品性色| 成人毛片免费观看| 三年片免费高清版 | 日韩人妻无码免费视频一区二区三区| 国产精品亚洲专一区二区三区| 亚洲综合色自拍一区| 国内精品免费麻豆网站91麻豆| 亚洲AV无码一区二区大桥未久| 久久乐国产精品亚洲综合| 91热成人精品国产免费| 日本黄页网址在线看免费不卡| 久久精品国产亚洲AV嫖农村妇女|