<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                ![](https://cdn.zimug.com/wx-zimug.png) 在之前的文章中已經為大家介紹了java并發編程的工具:BlockingQueue接口、ArrayBlockingQueue、DelayQueue。 LinkedBlockingQueue 隊列是BlockingQueue接口的實現類,所以它具有BlockingQueue接口的一切功能特點。LinkedBlockingQueue隊列 按照first-in-first-out (FIFO)先進先出的方式對元素進行排序。LinkeBlockingQueue 提供了兩種構造函數,一個構造函數構造一個隊列容量為固定個數的隊列,另一個無參構造函數構造一個隊列容量為`Integer.MAX_VALUE`的隊列. ~~~ public LinkedBlockingQueue() { this(Integer.MAX_VALUE); } public LinkedBlockingQueue(int capacity) { if (capacity <= 0) throw new IllegalArgumentException(); this.capacity = capacity; last = head = new Node<E>(null); } ~~~ ## ArrayBlockingQueue和LinkedBlockingQueue對比 * ArrayBlockingQueue插入和刪除數據,只采用了一個lock鎖,讀取和寫入操作無法并行。 所以在高并發場景下執行效率會比LinkedBlockingQueue慢一些。 ![](http://cdn.zimug.com/97fcd21b855775f709499613efa69fd2) * LinkedBlockingQueue采用“two lock queue”算法變體,雙鎖(ReentrantLock):takeLock、putLock,允許讀寫并行,remove(e)和迭代器iterators需要獲取2個鎖。這樣可以降低線程由于線程無法獲取到lock而進入WAITING狀態的可能性,從而提高了線程并發執行的效率。 ![](http://cdn.zimug.com/c5e91d0acdb30c69e6f78dfc21aafaa5) * ArrayBlockingQueue底層代碼是采用數組實現的,創建的時候必須指定隊列的容量并分配存儲空間;LinkedBlockingQueue采用的是鏈表數據結構實現的,其鏈表節點的存儲空間分配是動態的,新的元素對象加入隊列分配空間,元素對象從隊列取出之后存儲空間GC,初始化時指定的是隊列的最大容量。但是使用鏈表數據結構既是LinkedBlockingQueue優勢也是它的劣勢,高并發場景下由于空間動態分配需要java JVM頻繁的進行垃圾回收。 總體來說在并發場景下,LinkedBlockingQueue的吞吐量比ArrayBlockingQueue更好。**但是在java實現高性能隊列的首選是disruptor,它不是JDK自帶的。java程序員非常熟悉的Log4j2底層性能比logback和log4j有了較大的提升,究其原因就是使用了disruptor高性能隊列實現的異步日志**
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看