<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、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                # 線程同步問題以及synchronized的引入 我們之前寫了個模擬銀行排隊叫號的demo,這里為了說明問題我把代碼稍加改造: ```java public class TicketWindowRunnable implements Runnable { private int index = 1; private static final int MAX = 500; @Override public void run() { while (true) { if (index >= MAX) break; try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(Thread.currentThread().getName() + " 的號碼是:" + (index++)); } } } ``` 運行效果如下: ![](https://img.kancloud.cn/bd/45/bd457448bfa1ddcf115609c26becef05_960x205.gif) 可以看到我們的運行結果竟然出現了501,其實這個是因為線程同步問題導致的,這在我們并發中經常提到,類似的比如商品超賣等都并發中同時讀了數據,然后做了操作。我們來引入synchronized試一下: ```java public class TicketWindowRunnable implements Runnable { private int index = 1; private static final int MAX = 500; private final Object MOINTOR = new Object(); @Override public void run() { while (true) { synchronized (MOINTOR){ if (index >= MAX) break; try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(Thread.currentThread().getName() + " 的號碼是:" + (index++)); } } } } ``` 運行效果如下: ![](https://img.kancloud.cn/c0/52/c05217efa5045614d8eabdbac43ddb02_960x246.gif) synchronized 它可以把任意一個非 NULL 的對象當作鎖。他屬于獨占式的悲觀鎖,同時屬于可重 入鎖。 **Synchronized** **作用范圍** 1. 作用于方法時,鎖住的是對象的實例(this); 2. 當作用于靜態方法時,鎖住的是Class實例,又因為Class的相關數據存儲在永久帶PermGen(jdk1.8 則是 metaspace),永久帶是全局共享的,因此靜態方法鎖相當于類的一個全局鎖,會鎖所有調用該方法的線程; 3. synchronized 作用于一個對象實例時,鎖住的是所有以該對象為鎖的代碼塊。它有多個隊列。 更多細節我們后續再學習。
                  <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>

                              哎呀哎呀视频在线观看