<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國際加速解決方案。 廣告
                并發集合常見的有ConCurrentHashMap,ConcurrentllinkedQueue,ConcurrentLinkedDeque等,并發集合位于Java.util.concurrent包下,是JDK5之后有的。 在Java中有普通集合,同步(線程安全)的集合,并發集合,普通集合通常性能最高,但是不保證多線程的安全行和并發的可靠性,線程安全集合僅僅是給集合添加了synchronize同步鎖,嚴重犧牲了性能,而且對并發的效率就更低了,并發集合則通過復雜的策略不僅保證了多線程的安全又提高了并發時的效率。 ## **ConcurrentHashMap** ConcurrentHashMap是線程安全的HashMap實現,默認構造同樣有initalCapacity和loadFactor屬性,不過還多了一個concurrencyLevel屬性,三屬性的默認值分別是16、0.75及16。其內部使用鎖分段技術,維持這鎖Segment的數組,在Segment數組中又存放著Entity[]數組,內部hash算法將數據較均勻分部在不同鎖中。 **put方法** 在ConcurrentHashMap中并沒有給put方法加上synchronize,首先是對key.hashcode進行hash操作,得到key的hash值。hash操作的算法和map也不同,根據此hash值計算并獲取到其對應數組內的segment對象,在根據segme對象調用put方法來完成操作。 <br/> concurrentHashMap基于concurrencylevel劃分出了多個Segme來對key-value進行存儲,從而避免每次put操作都要鎖住整個數組,在默認情況下,最佳的情況可允許16個線程并發無阻塞的操作集合對象,盡可能的減少并發時造成的阻塞情況<br/> **get** 同樣也沒在方法上加synchronize,首先對key.hashcode進行Hash操作,基于其值找到對應的Segment對象,調用get方法完成當前操作,而Segment的get方法首先通過hash值和對象數組大小減1的值進行按位與操作來獲取數組上對應位置的HashEntity。在這個步奏中,可能會因為對象數組大小的改變,以及數組上對應位置的HashEntity產生不一致性,那么ConcurrentHashMap是如何實現的: 對象數組大小的改變只有在put操作時有可能發生,由于HashEntity對象數組對應的變量是volatile類型的,因此可以保證如HashEntity對象數組大小發生改變,讀操作可看到最新的對象數組大小。 在讀取到了HashEntity對象后,怎么能保證它及其next屬性構成鏈表上的對象不會改變呢?
                  <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>

                              哎呀哎呀视频在线观看