<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、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                ### AQS與ReentrantLock的關聯 從架構圖中可以得知,AQS提供了大量用于自定義同步器實現的Protected方法。自定義同步器實現的相關方法也只是為了通過修改State字段來實現多線程的獨占模式或者共享模式。自定義同步器需要實現以下方法(ReentrantLock需要實現的方法如下,并不是全部): | 方法名 | 描述 | | --- | --- | | protected boolean isHeldExclusively() | 該線程是否正在獨占資源。只有用到Condition才需要去實現它。 | | protected boolean tryAcquire(int arg) | 獨占方式。arg為獲取鎖的次數,嘗試獲取資源,成功則返回True,失敗則返回False。 | | protected boolean tryRelease(int arg) | 獨占方式。arg為釋放鎖的次數,嘗試釋放資源,成功則返回True,失敗則返回False。 | | protected int tryAcquireShared(int arg) | 共享方式。arg為獲取鎖的次數,嘗試獲取資源。負數表示失敗;0表示成功,但沒有剩余可用資源;正數表示成功,且有剩余資源。 | | protected boolean tryReleaseShared(int arg) | 共享方式。arg為釋放鎖的次數,嘗試釋放資源,如果釋放后允許喚醒后續等待結點返回True,否則返回False。 | 一般來說,自定義同步器要么是獨占方式,要么是共享方式,它們也只需實現tryAcquire-tryRelease、tryAcquireShared-tryReleaseShared中的一種即可。AQS也支持自定義同步器同時實現獨占和共享兩種方式,如ReentrantReadWriteLock。ReentrantLock是獨占鎖,所以實現了tryAcquire-tryRelease。 以非公平鎖為例,這里主要闡述一下非公平鎖與AQS之間方法的關聯之處,具體每一處核心方法的作用會在文章后面詳細進行闡述 ![](https://img.kancloud.cn/b5/ea/b5eaa4428aa5cacd8adc8766cfc785a2_658x796.png) 以非公平鎖為例,我們將加鎖和解鎖的交互流程單獨拎出來強調一下,以便于對后續內容的理解 ![](https://img.kancloud.cn/23/5b/235baa2d5f424d99613c07d4268764a9_531x539.png) 加鎖: * 通過ReentrantLock的加鎖方法Lock進行加鎖操作。 * 會調用到內部類Sync的Lock方法,由于Sync#lock是抽象方法,根據ReentrantLock初始化選擇的公平鎖和非公平鎖,執行相關內部類的Lock方法,本質上都會執行AQS的Acquire方法。 * AQS的Acquire方法會執行tryAcquire方法,但是由于tryAcquire需要自定義同步器實現,因此執行了ReentrantLock中的tryAcquire方法,由于ReentrantLock是通過公平鎖和非公平鎖內部類實現的tryAcquire方法,因此會根據鎖類型不同,執行不同的tryAcquire。 * tryAcquire是獲取鎖邏輯,獲取失敗后,會執行框架AQS的后續邏輯,跟ReentrantLock自定義同步器無關。 解鎖: * 通過ReentrantLock的解鎖方法Unlock進行解鎖。 * Unlock會調用內部類Sync的Release方法,該方法繼承于AQS。 * Release中會調用tryRelease方法,tryRelease需要自定義同步器實現,tryRelease只在ReentrantLock中的Sync實現,因此可以看出,釋放鎖的過程,并不區分是否為公平鎖。 * 釋放成功后,所有處理由AQS框架完成,與自定義同步器無關。 通過上面的描述,大概可以總結出ReentrantLock加鎖解鎖時API層核心方法的映射關系 ![](https://img.kancloud.cn/7a/b6/7ab6c3c994873d259be19d7218f50431_562x189.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>

                              哎呀哎呀视频在线观看