java中ConcurrentLinkedQueue類

来源:http://www.cnblogs.com/wangzhongqiu/archive/2017/02/25/6441361.html
-Advertisement-
Play Games

轉自:http://blog.csdn.net/u010142437/article/details/22734857 一、類結構: 類型參數:E - 在此 collection 中保持的元素類型所有已實現的介面: Serializable, Iterable<E>, Collection<E>, ...


轉自:http://blog.csdn.net/u010142437/article/details/22734857

一、類結構:

 

java.lang.Object
  java.util.AbstractCollection<E>
      java.util.AbstractQueue<E>
          java.util.concurrent.ConcurrentLinkedQueue<E>

類型參數:E - 在此 collection 中保持的元素類型所有已實現的介面:        Serializable, Iterable<E>, Collection<E>, Queue<E> 
二、概述:

public class ConcurrentLinkedQueue<E> extends AbstractQueue<E> implements Queue<E>, Serializable

一個基於鏈接節點的無界線程安全隊列。此隊列按照 FIFO(先進先出)原則對元素進行排序。隊列的頭部 是隊列中時間最長的元素。隊列的尾部 是隊列中時間最短的元素。新的元素插入到隊列的尾部,隊列獲取操作從隊列頭部獲得元素。當多個線程共用訪問一個公共 collection 時,ConcurrentLinkedQueue 是一個恰當的選擇。此隊列不允許使用 null 元素。 

此實現採用了有效的“無等待 (wait-free)”演算法,該演算法基於 Maged M. Michael 和 Michael L. Scott 合著的 Simple, Fast, and Practical Non-Blocking and Blocking Concurrent Queue Algorithms 中描述的演算法。

需要小心的是,與大多數 collection 不同,size 方法不是 一個固定時間操作。由於這些隊列的非同步特性,確定當前元素的數量需要遍歷這些元素。

此類及其迭代器實現了 CollectionIterator 介面的所有可選 方法。

記憶體一致性效果:當存在其他併發 collection 時,將對象放入 ConcurrentLinkedQueue 之前的線程中的操作 happen-before 隨後通過另一線程從 ConcurrentLinkedQueue 訪問或移除該元素的操作。 

此類是 Java Collections Framework 的成員。

 

三、構造方法: 1、public ConcurrentLinkedQueue() 創建一個最初為空的 ConcurrentLinkedQueue。 

2、public ConcurrentLinkedQueue(Collection<? extends E> c)

創建一個最初包含給定 collection 元素的 ConcurrentLinkedQueue,按照此 collection 迭代器的遍歷順序來添加元素。

 

參數:
c - 最初包含的元素 collection
拋出:
NullPointerException - 如果指定 collection 或其任何元素為 null
四、方法詳細:
1、public boolean add(E e)    將指定元素插入此隊列的尾部。 

 

指定者:介面 Collection<E> 中的 add

指定者:介面 Queue<E> 中的 add、

覆蓋: AbstractQueue<E> 中的 add

參數:o - 要添加的元素 

返回:true(根據 Collection.add(E) 的規定) 

拋出: NullPointerException - 如果指定元素為 null

 

2、public boolean offer(E e) 將指定元素插入此隊列的尾部。 

指定者:介面 Queue<E> 中的 offer

參數:e - 要添加的元素 

返回:true(根據 Queue.offer(E) 的規定) 

拋出: NullPointerException - 如果指定元素為 null

 

3、public E poll() 從介面 Queue 複製的描述 : 獲取並移除此隊列的頭,如果此隊列為空,則返回 null。 

指定者:介面 Queue<E> 中的 poll

返回:隊列的頭,如果此隊列為空,則返回 null

 

4、public E peek() 從介面 Queue 複製的描述 :獲取但不移除此隊列的頭;如果此隊列為空,則返回 null。 

指定者:介面 Queue<E> 中的 peek

返回:此隊列的頭;如果此隊列為空,則返回 null

 

5、public boolean isEmpty() 如果此隊列不包含任何元素,則返回 true。 

指定者:介面 Collection<E> 中的 isEmpty

覆蓋:類 AbstractCollection<E> 中的 isEmpty

返回:如果此隊列不包含任何元素,則返回 true

 

6、public int size() 返回此隊列中的元素數量。如果此隊列包含的元素數大於 Integer.MAX_VALUE,則返回Integer.MAX_VALUE。 

需要小心的是,與大多數 collection 不同,此方法不是 一個固定時間操作。由於這些隊列的非同步特性,確定當前的元素數需要進行一次花費 O(n) 時間的遍歷。 

指定者:介面 Collection<E> 中的 size

指定者:類 AbstractCollection<E> 中的 size

返回:此隊列中的元素數

 

7、public boolean contains(Object o) 如果此隊列包含指定元素,則返回 true。更確切地講,當且僅當此隊列至少包含一個滿足 o.equals(e) 的元素 e 時,返回 true。 

指定者:介面 Collection<E> 中的 contains

覆蓋:類 AbstractCollection<E> 中的 contains

參數:o - 要檢查是否包含於此隊列的對象 

返回:如果此隊列包含指定元素,則返回 true

 

8、public boolean remove(Object o) 從隊列中移除指定元素的單個實例(如果存在)。更確切地講,如果此隊列包含一個或多個滿足 o.equals(e) 的元素 e,則移除一個這樣的元素。如果此隊列包含指定元素(或者此隊列由於調用而發生更改),則返回 true。 

指定者:介面 Collection<E> 中的 remove

覆蓋:類 AbstractCollection<E> 中的 remove

參數:o - 將從此隊列中移除的元素(如果存在) 

返回:如果此隊列由於調用而發生更改,則返回 true

 

9、public Object[] toArray() 返回以恰當順序包含此隊列所有元素的數組。 

由於此隊列並不維護對返回數組的任何引用,因而它將是“安全的”。(換句話說,此方法必須分配一個新數組)。因此,調用者可以隨意修改返回的數組。 

此方法充當基於數組的 API 與基於 collection 的 API 之間的橋梁。 

指定者:介面 Collection<E> 中的 toArray

覆蓋:類 AbstractCollection<E> 中的 toArray

返回:包含此隊列所有元素的數組

 

10、public <T> T[] toArray(T[] a) 返回以恰當順序包含此隊列所有元素的數組;返回數組的運行時類型是指定數組的運行時類型。如果指定的數組能容納隊列,則將該隊列返回此處。否則,將分配一個具有指定數組的運行時類型和此隊列大小的新數組。 

如果指定的數組能容納隊列,並有剩餘的空間(即數組的元素比隊列多),那麼會將緊接隊列尾部的元素設置為null。 

像 toArray() 方法一樣,此方法充當基於數組的 API 與基於 collection 的 API 之間的橋梁。更進一步說,此方法允許對輸出數組的運行時類型進行精確控制,在某些情況下,這可以用來節省分配開銷。 

假定 x 是只包含字元串的一個已知隊列。以下代碼用來將該隊列轉儲到一個新分配的 String 數組: 

String[] y = x.toArray(new String[0]);

註意,toArray(new Object[0]) 和 toArray() 在功能上是相同的。 

指定者:介面 Collection<E> 中的 toArray

覆蓋:類 AbstractCollection<E> 中的 toArray

參數:a - 將用來存儲隊列元素的數組(如果該數組足夠大);否則,將為此分配一個具有相同運行時類型的新數組 

返回:包含此隊列所有元素的數組 

拋出: ArrayStoreException - 如果指定數組的運行時類型不是此隊列中每個元素的運行時類型的超類型 

NullPointerException - 如果指定數組為 null

 

11、public Iterator<Eiterator() 返回在此隊列元素上以恰當順序進行迭代的迭代器。返回的迭代器是一個“弱一致”迭代器,它不會拋出 ConcurrentModificationException,並且可保證遍歷迭代器構造時存在的元素,此外還可能(但並不保證)反映構造後的所有修改。 

指定者:介面 Iterable<E> 中的 iterator

指定者:介面 Collection<E> 中的 iterator

指定者:類 AbstractCollection<E> 中的 iterator

返回:在此隊列元素上以恰當順序進行迭代的迭代器


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • (原創,未經允許不得轉載) 經典的八皇後問題 題目: 八皇後問題就是在8*8的棋盤上放置8個皇後,使其任意兩個不在同一行、同一列、同一斜線上。 解題思路: 去掉行這個因素,然後去考慮是否在同一列或同一斜線上。每個擺放成功的棋子在(i,x[i]),然後設置當前行,然後在該行從第一列一直試探到第8列,看 ...
  • 一、Solr官網下載http://lucene.apache.org/solr/下載Solr項目文件 在該項目文件中,可以找到我們在本地環境下運行Solr伺服器所需要的資源文件,在這裡我們以4.10.3為例, 在dist目錄下我們可以得到solr-4.10.3.war文件,該war包目前在Tomca ...
  • 第一章總結: 1.java的是sun公司(現甲骨文有限公司)於1995年推出的高級編程語言,java技術可以應用在幾乎所有類型和規模的設備上,小到電腦晶元、蜂窩電話,大到超級電腦,無所不在。 2.在當前的軟體開發行業中,java已經成為了絕對的主流,java領域的java SE、java EE已 ...
  • 上節聊完了PHP官方的相關代碼規範,下麵給大家帶來了PHP系列的PHP推薦標準的另外兩個,PSR-3,PSR-4。 首先,我們先來瞭解下PSR-3是怎麼回事。 PHP-FIG發佈的第三個推薦規範與前兩個不同,不是一系列的指導方針,而是一個介面,規定PHP日誌記錄器組件可以實現的方法。 基礎 The  ...
  • 1.臨時空間給了個1024,不需要可減少長度。 2.結果只用用strcpy了,沒校驗。 bool Replace(char *str,const char *src, const char *des){ /* old -> new */ int srclen = strlen(src); int d ...
  • 轉自:http://blog.csdn.net/aitangyong/article/details/46472643 JDK7對JDK5中的J.U.C併發工具進行了增強,其中之一就是新增了TransferQueue。Java併發相關的JSR規範,可以查看Doug Lea維護的blog。現在簡單介紹 ...
  • 最近做的一個項目中遇到了要用java發送郵件的需求, 在網上找了下資料, 並整理出來 第一步: 導包 1.使用maven 我這裡使用的是maven, IDE工具則是用的idea, 所以這裡給出配置文件pom.xml里Jar包資源 2.自己下載架包 如果沒用maven的話, 就網上找個找個javaMa ...
  • 題目描述:計算字元串最後一個單詞的長度,單詞以空格隔開。 輸入描述:一行字元串 輸出描述:整數N,最後一個單詞的長度。 輸入例子:hello world 輸出例子:5 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...