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

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                在Java語言中存在兩種內建的synchronized語法:synchronized語句、synchronized方法。 * synchronized語句:當源代碼被編譯成字節碼的時候,會在同步塊的入口位置和退出位置分別插入monitorenter和monitorexit字節碼指令; * synchronized方法:在Class文件的方法表中將該方法的access\_flags字段中的synchronized標志位置1。這個在specification中沒有明確說明; #### monitorenter 每個對象都有一個鎖,也就是監視器(monitor)。當monitor被占有時就表示它被鎖定。線程執行monitorenter指令時嘗試獲取對象所對應的monitor的所有權,過程如下: 1. 如果monitor的進入數為0,則該線程進入monitor,然后將進入數設置為1,該線程即為monitor的所有者; 2. 如果線程已經擁有了該monitor,只是重新進入,則進入monitor的進入數加1; 3. 如果其他線程已經占用了monitor,則該線程進入阻塞狀態,直到monitor的進入數為0,再重新嘗試獲取monitor的所有權。 #### monitorexit 執行monitorexit的線程必須是相應的monitor的所有者; 指令執行時,monitor的進入數減1,如果減1后進入數為0,那線程退出monitor,不再是這個monitor的所有者。其他被這個monitor阻塞的線程可以嘗試去獲取這個monitor的所有權; 在 Java 6 之前,Monitor的實現完全是依靠操作系統內部的互斥鎖,因為需要進行用戶態到內核態的切換,所以同步操作是一個無差別的重量級操作;在JDK1.6及其之前的版本中monitorenter和monitorexit字節碼依賴于底層的操作系統的Mutex Lock來實現的,但是由于使用Mutex Lock需要將當前線程掛起并從用戶態切換到內核態來執行,這種切換的代價是非常昂貴的。然而在現實中的大部分情況下,同步方法是運行在單線程環境(無鎖競爭環境)。如果每次都調用Mutex Lock將嚴重的影響程序的性能。因此在JDK 1.6之后的版本中對鎖的實現做了大量的優化,這些優化在很大程度上減少或避免了Mutex Lock的使用
                  <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>

                              哎呀哎呀视频在线观看