<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>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                [TOC] <br/> > ### `Synchronized`同步類型 * 對于普通同步方法,鎖是當前實例對象。 * 對于靜態同步方法,鎖是當前類的`Class`對象。 * 對于同步方法塊,鎖是`Synchonized`括號里配置的對象。 <br/> > ### `Synchronized`底層實現 * `JVM`基于進入和退出`Monitor`對象來實現方法同步和代碼塊同步,但兩者的實現細節不一樣。代碼塊同步是使用`monitorenter`和`monitorexit`指令實現的。 `monitorenter`指令是在編譯后插入到同步代碼塊的開始位置,而`monitorexit`是插入到方法結束處和異常處,任何對象都有一個`monitor`與之關聯,當且一個`monitor`被持有后,它將處于鎖定狀態。線程執行到`monitorenter`指令時,將會嘗試獲取對象所對應的`monitor`的所有權,即嘗試獲得對象的鎖。 * `synchronized`用的鎖是存在`Java`對象頭里的`Mark Word` <br/> > ### `Java`對象頭 * 如果對象是數組類型,則虛擬機用3個字寬(`Word`)存儲對象頭,如果對象是非數組類型,則用2字寬存儲對象頭。數組對象相對于普通對象多了一個字寬記錄數組長度。 ![](https://i.loli.net/2019/03/10/5c84ba6634f78.png) <br/> > ### `Java1.6`之后鎖的升級 * **偏向鎖**,偏向鎖使用了一種等到競爭出現才釋放鎖的機制,所以當其他線程嘗試競爭偏向鎖時,持有偏向鎖的線程才會釋放鎖。偏向鎖的鎖記錄存儲在對象頭中。 ![](https://i.loli.net/2019/03/10/5c84d33dc9a79.png) * **輕量級鎖**,線程在執行同步塊之前,JVM會先在當前線程的棧楨中創建用于存儲鎖記錄的空間,并將對象頭中的`Mark Word`復制到鎖記錄中,官方稱為`Displaced Mark Word`。然后線程嘗試使用CAS將對象頭中的Mark Word替換為指向鎖記錄的指針。如果成功,當前線程獲得鎖,如果失敗,表示其他線程競爭鎖,當前線程便嘗試使用自旋來獲取鎖。 ![](https://i.loli.net/2019/03/10/5c84d357441ed.png) * 偏向鎖、輕量級鎖、重量級鎖對比 ![](https://i.loli.net/2019/03/10/5c84cfda13ae7.png)
                  <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>

                              哎呀哎呀视频在线观看