最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

ConcurrentLinkedQueue

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

ConcurrentLinkedQueue原理

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

ConcurrentLinkedQueue類繼承AbstractQueue抽象類

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

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

ConcurrentLinkedQueue操作方法

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

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

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

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

1、添加

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

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

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

2、刪除

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

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

3、peek操作

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

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

相關(guān)文章

  • IDEA高效查看源碼的快捷鍵及小技巧

    IDEA高效查看源碼的快捷鍵及小技巧

    本篇文章這一部分的內(nèi)容主要為大家介紹了一些平時(shí)看源碼的時(shí)候常用的快捷鍵/小技巧!非常好用!掌握這些快捷鍵/小技巧,看源碼的效率提升一個(gè)等級
    2022-01-01
  • 淺談SpringCloud之Ribbon詳解

    淺談SpringCloud之Ribbon詳解

    這篇文章主要介紹了淺談SpringCloud之Ribbon,文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)SpringCloud的小伙伴們有很大的幫助,需要的朋友可以參考下
    2021-05-05
  • JAVA 多態(tài) 由淺及深介紹

    JAVA 多態(tài) 由淺及深介紹

    JAVA 多態(tài) 由淺及深介紹,什么是多態(tài)?多態(tài)的詳細(xì)解釋,多態(tài)的好處,多態(tài)的實(shí)際運(yùn)用等
    2013-03-03
  • springboot發(fā)送request請求的方式小結(jié)

    springboot發(fā)送request請求的方式小結(jié)

    在Java中,發(fā)送HTTP請求是常見需求,hutool工具包和RestTemplate類是實(shí)現(xiàn)此功能的兩種主流方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-09-09
  • Java中ArrayList同步的2種方法分享

    Java中ArrayList同步的2種方法分享

    這篇文章主要分享了Java中ArrayList同步的2種方法,Collections.synchronizedList()的方法,這個(gè)方法要進(jìn)行串行訪問以及使用CopyOnWriteArrayList,下面分享內(nèi)容需要的小伙伴可以參考一下
    2022-03-03
  • SWT(JFace) 圖片瀏覽器 實(shí)現(xiàn)代碼

    SWT(JFace) 圖片瀏覽器 實(shí)現(xiàn)代碼

    SWT(JFace)小制作:圖片瀏覽器
    2009-06-06
  • SpringMVC ajax請求的處理方法介紹

    SpringMVC ajax請求的處理方法介紹

    Ajax即異步的 JavaScript和XML,是一種無需重新加載整個(gè)網(wǎng)頁的情況下,能夠更新部分模塊的網(wǎng)頁技術(shù),下面這篇文章主要給大家介紹了關(guān)于SpringMVC Ajax請求的處理,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-11-11
  • 網(wǎng)絡(luò)爬蟲案例解析

    網(wǎng)絡(luò)爬蟲案例解析

    本文主要介紹了網(wǎng)絡(luò)爬蟲的小案例。具有很好的參考價(jià)值。下面跟著小編一起來看下吧
    2017-03-03
  • springMVC中@RequestParam和@RequestPart的區(qū)別

    springMVC中@RequestParam和@RequestPart的區(qū)別

    本文主要介紹了springMVC中@RequestParam和@RequestPart的區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-06-06
  • MyBatis-Plus allEq()的用法詳解

    MyBatis-Plus allEq()的用法詳解

    這篇文章主要介紹了MyBatis-Plus allEq()的用法詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12

最新評論

五莲县| 拜泉县| 灌云县| 周口市| 色达县| 安康市| 金平| 淮南市| 桃源县| 博爱县| 洪湖市| 彭泽县| 缙云县| 任丘市| 建昌县| 科尔| 星座| 镇雄县| 平顶山市| 黄山市| 金平| 惠来县| 莱阳市| 赤城县| 阿克陶县| 佛山市| 山阳县| 铅山县| 特克斯县| 潜江市| 吴桥县| 河南省| 阿尔山市| 江北区| 福海县| 绥芬河市| 平昌县| 高陵县| 井冈山市| 喜德县| 吴旗县|