欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

并發(fā)編程ConcurrentLinkedQueue示例詳解

 更新時間:2022年12月26日 16:05:38   作者:刨紅薯的小羊竿爾  
這篇文章主要為大家介紹了并發(fā)編程ConcurrentLinkedQueue使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

ConcurrentLinkedQueue

ConcurrentLinkedQueue是非阻塞線程安全的隊列,適用于高并發(fā)的場景。是一個基于鏈接節(jié)點的無界線程安全隊列,按照 FIFO(先進先出)原則對元素進行排序。隊列元素中不可以放置null元素(內(nèi)部實現(xiàn)的特殊節(jié)點除外)

ConcurrentLinkedQueue原理

  • ConcurrentLinked是由鏈表結構組成的線程安全的先進先出無界隊列。
  • 當多線程要共享訪問集合時,ConcurrentLinkedQueue是一個比較好的選擇。
  • 不允許插入null元素
  • 支持非阻塞地訪問并發(fā)安全的隊列,不會拋出ConcurrentModifiationException異常。
  • size方法不是準確的,因為在統(tǒng)計集合的時候,隊列可能正在添加元素,導致統(tǒng)計不準。
  • 批量操作addAll、removeAll、retainAll、containsAll、equals和toArray不保證原子性(操作不可分割)
  • 添加元素happen-before其他線程移除元素。

ConcurrentLinkedQueue類繼承AbstractQueue抽象類

具有隊列的功能;實現(xiàn)了Queue接口,可作為隊列使用。

  • ConcurrentLinkedQueue繼承于AbstractQueue。
  • ConcurrentLinkedQueue內(nèi)部是通過鏈表來實現(xiàn)的。同時包含鏈表的頭節(jié)點head和尾節(jié)點tail。
  • ConcurrentLinkedQueue按照 FIFO(先進先出)原則對元素進行排序。元素都是從尾部插入到鏈表,從頭部開始返回。
  • ConcurrentLinkedQueue的鏈表Node中的next的類型是volatile,而且鏈表數(shù)據(jù)item的類型也是volatile。ConcurrentLinkedQueue就是通過volatile來實現(xiàn)多線程對競爭資源的互斥訪問的。
  • 其中head節(jié)點存放鏈表第一個item為null的節(jié)點,tail則并不是總指向最后一個節(jié)點

ConcurrentLinkedQueue操作方法

private transient volatile Node<E> head;
private transient volatile Node<E> tail;
public ConcurrentLinkedQueue() {
    head = tail = new Node<E>(null);
}

構造函數(shù)中,新建了一個“內(nèi)容為null的節(jié)點”,并設置表頭head和表尾tail的值為新節(jié)點。 head和tail是volatile類型,具有volatile賦予的含義:“即對一個volatile變量的讀,總是能看到(任意線程)對這個volatile變量最后的寫入”。

private static class Node<E> {
    volatile E item;
    volatile Node<E> next;
    Node(E item) {
        UNSAFE.putObject(this, itemOffset, item);
    }
}

Node是單向鏈表節(jié)點,next指向下一個Node,item用于存儲數(shù)據(jù)。Node中操作節(jié)點數(shù)據(jù)的API,是通過Unsafe機制的CAS函數(shù)實現(xiàn)的;例如casNext()是通過CAS函數(shù)“比較并設置節(jié)點的下一個節(jié)點”。

1、添加

  以add(E e)為例對ConcurrentLinkedQueue中的添加

public boolean add(E e) {
  return offer(e);
}

add()實際上是調(diào)用的offer()來完成添加操作的;offer(E e)的作用就是將元素e添加到鏈表的末尾。

2、刪除

poll():在鏈表頭部獲取并且移除一個元素

poll()的作用就是刪除鏈表的表頭節(jié)點,并返回被刪節(jié)點對應的值。

3、peek操作

peek操作是獲取鏈表頭部一個元素(只讀取不移除)。

以上就是并發(fā)編程ConcurrentLinkedQueue示例詳解的詳細內(nèi)容,更多關于并發(fā)編程ConcurrentLinkedQueue的資料請關注腳本之家其它相關文章!

相關文章

  • mybatis中延遲加載Lazy策略的方法

    mybatis中延遲加載Lazy策略的方法

    這篇文章主要介紹了mybatis中延遲加載Lazy策略,需要的朋友可以參考下
    2018-06-06
  • Java中如何保證緩存一致性問題

    Java中如何保證緩存一致性問題

    這篇文章主要介紹了Java中如何保證緩存一致性問題,文章將通過主題提出的問題展開一些解決方案分析,需要的小伙伴可以參考一下
    2022-04-04
  • 淺析Java Web錯誤/異常處理頁面

    淺析Java Web錯誤/異常處理頁面

    這篇文章主要和大家一起對Java Web錯誤/異常處理頁面進行分析研究,感興趣的小伙伴們可以參考一下
    2016-03-03
  • Java模擬棧和隊列數(shù)據(jù)結構的基本示例講解

    Java模擬棧和隊列數(shù)據(jù)結構的基本示例講解

    這篇文章主要介紹了Java模擬棧和隊列數(shù)據(jù)結構的基本示例,棧的后進先出和隊列的先進先出是數(shù)據(jù)結構中最基礎的知識,本文則又對Java實現(xiàn)棧和隊列結構的方法進行了細分,需要的朋友可以參考下
    2016-04-04
  • Java實現(xiàn)二維碼生成的代碼方法

    Java實現(xiàn)二維碼生成的代碼方法

    這篇內(nèi)容分享了JAVA實現(xiàn)二維碼生成的實例代碼,對此有需要的朋友們可以測試參考下。
    2018-07-07
  • SpringBoot?基于?MongoTemplate?的工具類過程詳解

    SpringBoot?基于?MongoTemplate?的工具類過程詳解

    MongoDB是一個高性能,開源,無模式的文檔型數(shù)據(jù)庫,是當前NoSql數(shù)據(jù)庫中比較熱門的一種,這篇文章主要介紹了SpringBoot基于MongoTemplate的工具類,需要的朋友可以參考下
    2023-09-09
  • java使用tess4j進行圖片文字識別功能

    java使用tess4j進行圖片文字識別功能

    Tess4J?是Java?(JNA)?對?Tesseract?OCR?API?的封裝,Tess4J是java直接可使用的jar包,而Tesseract?OCR是支持Tess4J進文件文字識別的基礎,Tess4J可直接使用Maven方式引入,這篇文章主要介紹了java使用tess4j進行圖片文字識別,需要的朋友可以參考下
    2023-04-04
  • 關于mybatis-plus邏輯刪除自動填充更新時間的問題

    關于mybatis-plus邏輯刪除自動填充更新時間的問題

    mybatis-plus是對mybatis的增強,mybatis-plus更像是面向對象編程,數(shù)據(jù)庫基本CRUD的操作可以不用手動編寫SQL語句,大大提高了開發(fā)的效率,這篇文章主要介紹了mybatis-plus邏輯刪除自動填充更新時間問題,需要的朋友可以參考下
    2022-07-07
  • Java判斷時間段內(nèi)文件是否更新的方法

    Java判斷時間段內(nèi)文件是否更新的方法

    這篇文章主要介紹了Java判斷時間段內(nèi)文件是否更新的方法,通過實例形式講述了定時器、類加載器及線程等方法實現(xiàn)判斷文件更新的功能,具有一定的參考借鑒價值,需要的朋友可以參考下
    2014-12-12
  • SpringBoot?web靜態(tài)資源映射實現(xiàn)步驟詳解

    SpringBoot?web靜態(tài)資源映射實現(xiàn)步驟詳解

    在springBoot中的靜態(tài)資源的映射是通過SpringMVC中的resourceHttpRequestHandler來進行實現(xiàn)的。在該請求映射器中默認規(guī)定了,SpringBoot會將classPath或者ServletContext下的/static?(/public、/resources?或?/META-INF/resources)目錄中,存放靜態(tài)資源
    2022-09-09

最新評論