<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、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                [TOC] ### **非公平鎖** JVM?按隨機、就近原則分配鎖的機制則稱為不公平鎖,?ReentrantLock?在構造函數中提供了 是否公平鎖的初始化方式,默認為非公平鎖。非公平鎖實際執行的效率要遠遠超出公平鎖,除非 程序有特殊需要,否則最常用非公平鎖的分配機制。 加鎖前檢查是否有排隊等待的線程,優先排隊等待的線程,先來先得 ### **公平鎖** 公平鎖指的是鎖的分配機制是公平的,通常先對鎖提出獲取請求的線程會先被分配到鎖, ReentrantLock?在構造函數中提供了是否公平鎖的初始化方式來定義公平鎖。 <br> 加鎖時不考慮排隊等待問題,直接嘗試獲取鎖,獲取不到自動到隊尾等待 1. 非公平鎖性能比公平鎖高?5~10?倍,因為公平鎖需要在多核的情況下維護一個隊列 2. Java?中的?synchronized?是非公平鎖,ReentrantLock?默認的?lock()方法采用的是非公平鎖。 <br> ### **ReentrantLock與synchronized** 1. ReentrantLock?通過方法?lock()與?unlock()來進行加鎖與解鎖操作,與synchronized?會 被?JVM?自動解鎖機制不同,?ReentrantLock?加鎖后需要手動進行解鎖。為了避免程序出 現異常而無法正常解鎖的情況,使用?ReentrantLock?必須在?finally?控制塊中進行解鎖操 作。 2. ReentrantLock?相比?synchronized?的優勢是可中斷、公平鎖、多個鎖。這種情況下需要 使用?ReentrantLock? 。 <br> #### ReentrantLock? 使用 ~~~java public class MyService { private Lock lock = new ReentrantLock(); //Lock lock=new ReentrantLock(true);//公平鎖 //Lock lock=new ReentrantLock(false);//非公平鎖 private Condition condition = lock.newCondition();//創建 Condition public void testMethod() { try { lock.lock();//lock 加鎖 //1:wait 方法等待: //System.out.println("開始 wait"); condition.await(); //通過創建 Condition 對象來使線程 wait,必須先執行 lock.lock 方法獲得鎖 //:2:signal 方法喚醒 condition.signal();//condition 對象的 signal 方法可以喚醒 wait 線程 for (int i = 0; i < 5; i++) { System.out.println("ThreadName=" + Thread.currentThread().getName() + (" " + (i + 1))); } } catch (InterruptedException e) { e.printStackTrace(); } finally { lock.unlock(); } } } ~~~ ### **Condition類和Object類鎖方法區別區別** 1. Condition類的awiat方法和Object類的wait方法等效 2. Condition類的signal方法和Object類的notify方法等效 3. Condition類的signalAll方法和Object類的notifyAll方法等效 4. ReentrantLock類可以喚醒指定條件的線程,而object的喚醒是隨機的 ### **tryLock**和**lock**和**lockInterruptibly**的區別 1. tryLock?能獲得鎖就返回?true,不能就立即返回?false?,tryLock(long?timeout,TimeUnit unit),可以增加時間限制,如果超過該時間段還沒獲得鎖,返回?false 2. lock能獲得鎖就返回true,不能的話一直等待獲得鎖 3. lock?和?lockInterruptibly?,如果兩個線程分別執行這兩個方法,但此時中斷這兩個線程, lock?不會拋出異常,而?lockInterruptibly?會拋出異常。
                  <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>

                              哎呀哎呀视频在线观看