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

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                # wait和sleep的本質區別 先看一下他們的定義: **wait:**線程等待,調用該方法的線程進入 `WAITING` 狀態,只有等待另外線程的通知或被中斷才會返回,需要注意的是調用 `wait()`方法后,會釋放對象的鎖。因此,`wait` 方法一般用在同步方法或同步代碼塊中。 **sleep:**線程睡眠,`sleep` 導致當前線程休眠,與 `wait` 方法不同的是 `sleep` 不會釋放當前占有的鎖,`sleep(long)`會導致線程進入 `TIMED-WATING` 狀態,而 `wait()`方法會導致當前線程進入 `WATING` 狀態 1. 對于 sleep()方法,我們首先要知道該方法是屬于 Thread 類中的。而 wait()方法,則是屬于Object 類中的。 ![](https://img.kancloud.cn/db/e8/dbe8a688b24291e49d2e746e5e2b9feb_301x541.png) ![](https://img.kancloud.cn/01/9b/019bc0a2be8ea6782fa98a1545f05991_300x366.png) 2. sleep()方法導致了程序暫停執行指定的時間,讓出 cpu 該其他線程,但是他的監控狀態依然保持者,當指定的時間到了又會自動恢復運行狀態。 3. sleep()使用時不需要使用syncronized加上同步鎖,但是wait()需要。 ```java /** * @program: ThreadDemo * @description: wait和sleep的本質區別 * @author: hs96.cn@Gmail.com * @create: 2020-09-07 */ public class DifferenceOfWaitAndSleep { public static final Object LOCK = new Object(); public static void main(String[] args) { m1(); m2(); } // 休眠2秒正常結束 public static void m1() { try { Thread.sleep(2_000); } catch (InterruptedException e) { e.printStackTrace(); } } public static void m2() { try { LOCK.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } } ``` 運行效果如下: ![](https://img.kancloud.cn/bf/e1/bfe1860812b11ccfb127b728ae1e8ddd_1154x456.gif) 4.sleep()時不會釋放同步鎖,但是wait()會釋放。 我們先試一下啊sleep ```java public class DifferenceOfWaitAndSleep { public static final Object LOCK = new Object(); public static void main(String[] args) { for (int i = 0; i < 2; i++) { new Thread(new Runnable() { @Override public void run() { m1(); } }).start(); } } public static void m1() { synchronized (LOCK){ try { System.out.println(Thread.currentThread().getName()); Thread.sleep(3_000); } catch (InterruptedException e) { e.printStackTrace(); } } } } ``` 運行效果如下: ![](https://img.kancloud.cn/e9/4b/e94b05d20f5bb96035e6455c218e205c_1154x456.gif) 可以看到sleep()時不會釋放同步鎖。那么wait呢? ```java public class DifferenceOfWaitAndSleep { public static final Object LOCK = new Object(); public static void main(String[] args) { for (int i = 0; i < 2; i++) { new Thread(new Runnable() { @Override public void run() { m1(); } }).start(); } } public static void m1() { synchronized (LOCK){ try { System.out.println(Thread.currentThread().getName()); LOCK.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } } } ``` 運行效果如下: ![](https://img.kancloud.cn/4f/46/4f46aaf0c94f2e94af1df0484f28be2d_1154x456.gif) 可以看到幾乎是同時執行的,也就是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>

                              哎呀哎呀视频在线观看