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

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # Java 中 `sleep()`和`wait()`之間的區別 > 原文: [https://howtodoinjava.com/java/multi-threading/sleep-vs-wait/](https://howtodoinjava.com/java/multi-threading/sleep-vs-wait/) 了解 Java 中`sleep()`和`wait()`方法之間的**區別**。 了解何時使用哪種方法以及 [Java 并發](https://howtodoinjava.com/java-concurrency-tutorial/)帶來什么效果。 ## 1\. Java `sleep()`和`wait()` – 討論 `sleep()`是一種用于暫停該過程幾秒鐘或我們想要的時間的方法。 但是,在使用`wait()`方法的情況下,線程進入等待狀態,直到我們調用`notify()`或`notifyAll()`時,線程才會自動返回。 主要區別在于,`wait()`會釋放鎖定或監視器,而`sleep()`不會在等待期間釋放鎖定或監視器。 通常,`wait()`用于線程間通信,而`sleep()`用于引入執行暫停。 `Thread.sleep()`將當前線程發送到“不可運行”狀態一段時間。 該線程保留已獲取的監視器 - 即,如果該線程當前在`synchronized`塊或方法中,則沒有其他線程可以進入該塊或方法。 如果另一個線程調用`t.interrupt()`。 它將喚醒睡眠線程。 `sleep()`是`static`方法,這意味著它始終會影響當前線程(正在執行`sleep`方法的線程)。 一個常見的錯誤是在`t`是不同線程的情況下調用`t.sleep()`。 即使這樣,仍將休眠的是當前線程,而不是`t`線程。 > 閱讀更多:[使用`wait()`和`notify()`](https://howtodoinjava.com/java/multi-threading/wait-notify-and-notifyall-methods/) ## 2\. Java `sleep()`和`wait()` – 示例 ```java synchronized(LOCK) { Thread.sleep(1000); // LOCK is held } ``` ```java synchronized(LOCK) { LOCK.wait(); // LOCK is not held } ``` > 閱讀更多: [`yield()`和`join()`之間的區別](https://howtodoinjava.com/java/multi-threading/difference-between-yield-and-join-in-threads-in-java/) ## 3\. Java `sleep()`和`wait()` – 總結 簡而言之,讓我們對以上所有要點進行分類以記住。 #### 3.1 在...上調用方法 * `wait()` – 調用對象; 當前線程必須在鎖對象上同步。 * `sleep()` – 調用線程; 始終當前正在執行的線程。 #### 3.2 同步 * `wait()` – 同步多個線程時,一個線程一個對象訪問一個對象。 * `sleep()` – 同步時,多個線程等待休眠線程的休眠。 #### 3.3 鎖定時間段 * `wait()` – 釋放其他對象有機會執行的鎖定。 * `sleep()` – 如果指定了超時或有人中斷,請保持鎖定至少 t 次。 #### 3.4 喚醒條件 * `wait()` – 直到從對象調用`notify()`,`notifyAll()` * `sleep()` – 直到至少時間到期或調用`interrupt()`。 #### 3.5 用法 * `sleep()` – 用于時間同步 * `wait()` – 用于多線程同步。 希望以上信息將為您的知識庫增加一些價值。 學習愉快! [`Thread.sleep`方法 Java 文檔](https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html#sleep-long-) [`Object.wait()`方法 Java 文檔](https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#wait--)
                  <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>

                              哎呀哎呀视频在线观看