<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      多線程系列3-JUC阻塞隊列方法

      JUC面試:

      Java JUC是Java Util Concurrent的縮寫,指的是java.util.concurrent工具包,這是Java中處理并發編程的核心庫。里面的很多功能都是基于ReetrantLock來實現的。比如

      ArrayBlockingQueue、
      SynchronousQueue、
      LinkedBlockingQueue、
      DelayQueue、
      PriorityBlockingQueue的一些組件。
      ReetrantLock是怎么實現的呢,他是用AQS提供的方式去實現的。它是一個抽象方法:
      AbstractQueuedSynchronizer,里面提供了實現鎖的方法。
      里面幾個關鍵屬性:
      java.util.concurrent.locks.AbstractQueuedSynchronizer#state
      head節點
      tail節點
      是一個雙向鏈表。

      JUC

      JUC基本概念

      Java JUC是Java Util Concurrent的縮寫,指的是java.util.concurrent工具包,這是Java中處理并發編程的核心庫。

       

      1、通用offer方法
      當是put時,如果此時隊列里的數據為0,則有可能之前有take操作被阻塞,所以需要喚醒讀鎖里面的await()操作,反之:
      當是poll時,如果此時隊列里的數據為滿,則有可能之前有put操作被阻塞,所以需要喚醒寫鎖里面的await()操作
       

       LinkedBlockingQueue 鏈表有雙鎖,put和take鎖。因為有哨兵節點,head = last = node。操作的都是node.next幾點,所以讀和寫不影響,可以并行。

      java.util.concurrent.ArrayBlockingQueue 

       

      java.util.concurrent.PriorityBlockingQueue

      PriorityBlockingQueue它會保證第一個數據是最小的,叫最小堆嘛。

       

       基于數組實現的方式:

       

       

       

       

       

       

      程序關鍵代碼實現:遞歸比較最小,挪到最頂點,堆頂數據最小

       

       

       

       
      java.util.concurrent.ArrayBlockingQueue  基于數組的,取和放是同一把鎖
      java.util.concurrent.LinkedBlockingQueue 基于鏈表的,取數據和放數據是兩把鎖(并發高)
      java.util.concurrent.DelayQueue 延遲隊列,基于PriorityQueue,無界隊列
      java.util.concurrent.PriorityBlockingQueue 優先級隊列, 存還是用的數組,基于二叉堆(滿二叉樹,小頂堆),輸出是有序的,無界隊列
      SynchronousQueue 等待生產者和消費者來配對

       

       

       

       

       SynchronousQueue 中的 transfer()流程圖:

      stack操作的是head,因為是先進后出,來了數據就往下面壓

      queue操作的是tail,因為是先進先出,來了數據就要下面接

      ----------------------------------------------

      對象屬性如何cas,對象屬性如何cas,對象屬性如何cas,對象屬性如何cas,對象屬性如何cas,對象屬性如何cas,

      private static final long tailOffset;

      UNSAFE = sun.misc.Unsafe.getUnsafe();

      Class<?> k = TransferQueue.class;

      tailOffset= UNSAFE.objectFieldOffset (k.getDeclaredField("tail"))

      這段代碼的意思是,獲取long類型的 內存key值,用于cpu 做cas操作

      TransferQueue 有屬性tail,假如我要對這個tail做cas替換操作,那么就需要用到tailOffset

      UNSAFE.compareAndSwapObject(this, tailOffset, t, nt);

      這里的this指的是當前線程,tailOffset cas操作鎖需要的long類型key值,被替換的對象,nt將要設置的值

       

       

       

      posted on 2025-05-05 00:01  Hi Martin  閱讀(18)  評論(0)    收藏  舉報

      主站蜘蛛池模板: 国产精品国产三级国快看| 久久精品国产91精品亚洲| 亚洲中文字幕成人综合网| 人妻综合专区第一页| 亚洲欧美日韩愉拍自拍| 无码av永久免费专区麻豆| 91亚洲国产成人精品性色| 亚洲一区二区日韩综合久久 | 亚洲精品国产精品国在线 | 国产成人片无码视频| 日韩一区二区三区精品区| 中文字幕无码专区一VA亚洲V专 | 天天做天天爱夜夜爽导航| 九九热在线观看视频精品| 中文字幕精品人妻丝袜| 无码伊人66久久大杳蕉网站谷歌| 精品人妻二区中文字幕| 国产啪视频免费观看视频| 国产午夜无码视频在线观看| 视频| 亚洲成片在线看一区二区| 亚洲熟妇乱色一区二区三区| 国产高清一区二区不卡| 色色97| 老熟妇仑乱换频一区二区| 国产亚洲av嫩草久久| 国语精品自产拍在线观看网站| 国产成人午夜精品影院| 亚洲日本欧洲二区精品| 精品久久久久国产免费| 国产成人精品视频国产| 91精品国产午夜福利| 日韩不卡手机视频在线观看| 国产涩涩视频在线观看| 国产午夜影视大全免费观看| 免费观看全黄做爰大片国产 | 国产91丝袜在线播放动漫| 国产偷窥厕所一区二区| 中文字幕亚洲国产精品| 国产精品 无码专区| 九九热视频在线播放|