blockingQueue接口的詳解!

https://www.cnblogs.com/xuxiuxiu/p/6830485.html

BlockingQueue接口  

      ArrayBlockingQueue:基於數組的阻塞隊列實現,在ArrayBlockingQueue內部,維護了一個定長數組,
      以便緩存隊列中的數據對象,其內部沒實現讀寫分離,也就童味着生產和消費不能完全並行,
      長度是需要定義的,可以指定先進先出成者先進後出,也叫有界隊列。在很多場合非常適合使用。

      LinkedBlockingQueue:基於鏈表的風塞隊列,同ArrayBlockingQueue類似. 其內部也維持着一
      個數據緩衝隊列(該隊列由一個鏈表構成) ,LinkedBlockingQueue之 所以能夠高效的處理併發數據,
      是因爲其內部實現採用分高鎖(讀寫分高兩個鎖),從而實現生產者和消費者操作的完全並行運行。
      他是一一個無界隊列。

      SynchronousQueue-種沒有緩衝的隊列, 生產者產生的數據直接會被消費者獲取並消費.

      PrioriyBlockingQueue;基於優先級的阻離隊列(優先級的判斷通過構造所數傳入的Compator對象來決定,
      也就是說傳入隊列的對象必須實現Comparable接口),在實現PriorityBlockingQueue時,
      內部控制線程同步的鎖採用的是公平鎖。他也是一一個無界的隊列。

      DelayQueue;帶有延遲時間的Queue,其中的元素只有當其指定的延遲時間到了,
      才能夠從隊列中獲取到該元素。DelayQueue中的 元素必須實現Delayed接口,
      DelayQueue是一個沒有大小限制的隊列,應用場景很多,比如對緩存超時的數據進行移除、
      任務超時處理、空閒連接的關閉等等。
      

 

1.1offer(anObject):表示如果可能的話,將anObject加到BlockingQueue裏,即如果BlockingQueue可以容納,
    則返回true,否則返回false.(本方法不阻塞當前執行方法的線程)

  1.2offer(E o, long timeout, TimeUnit unit),可以設定等待的時間,如果在指定的時間內,還不能往隊列中
    加入BlockingQueue,則返回失敗。
  1.3put(anObject):把anObject加到BlockingQueue裏,如果BlockQueue沒有空間,則調用此方法的線程被阻斷
    直到BlockingQueue裏面有空間再繼續.
        獲取數據:
  1.4 poll(time):取走BlockingQueue裏排在首位的對象,若不能立即取出,則可以等time參數規定的時間,
    取不到時返回null;
  1.5 poll(long timeout, TimeUnit unit):從BlockingQueue取出一個隊首的對象,如果在指定時間內,
    隊列一旦有數據可取,則立即返回隊列中的數據。否則知道時間超時還沒有數據可取,返回失敗。
  1.6 take():取走BlockingQueue裏排在首位的對象,若BlockingQueue爲空,阻斷進入等待狀態直到
    BlockingQueue有新的數據被加入; 
  drainTo():一次性從BlockingQueue獲取所有可用的數據對象(還可以指定獲取數據的個數), 
    通過該方法,可以提升獲取數據效率;不需要多次分批加鎖或釋放鎖。

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