欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解Java中的sleep()和wait()的區(qū)別

 更新時間:2017年09月21日 08:36:58   投稿:lqh  
這篇文章主要介紹了詳解Java中的sleep()和wait()的區(qū)別的相關資料,希望通過本文能幫助到大家,需要的朋友可以參考下

詳解Java中的sleep()和wait()的區(qū)別

對于sleep()方法,我們首先要知道該方法是屬于Thread類中的。而wait()方法,則是屬于Object類中的。

sleep()方法導致了程序暫停執(zhí)行指定的時間,讓出cpu該其他線程,但是他的監(jiān)控狀態(tài)依然保持者,當指定的時間到了又會自動恢復運行狀態(tài)。

在調(diào)用sleep()方法的過程中,線程不會釋放對象鎖。

而當調(diào)用wait()方法的時候,線程會放棄對象鎖,進入等待此對象的等待鎖定池,只有針對此對象調(diào)用notify()方法后本線程才進入對象鎖定池準備

獲取對象鎖進入運行狀態(tài)。

什么意思呢?

舉個列子說明:

/**
 * 
 */
package com.b510.test;

/**
 * java中的sleep()和wait()的區(qū)別
 * @author Hongten Java學習交流QQ群:589809992 我們一起學Java!
 * @date 2013-12-10
 */
public class TestD {

  public static void main(String[] args) {
    new Thread(new Thread1()).start();
    try {
      Thread.sleep(5000);
    } catch (Exception e) {
      e.printStackTrace();
    }
    new Thread(new Thread2()).start();
  }

  private static class Thread1 implements Runnable{
    @Override
    public void run(){
      synchronized (TestD.class) {
      System.out.println("enter thread1...");  
      System.out.println("thread1 is waiting...");
      try {
        //調(diào)用wait()方法,線程會放棄對象鎖,進入等待此對象的等待鎖定池
        TestD.class.wait();
      } catch (Exception e) {
        e.printStackTrace();
      }
      System.out.println("thread1 is going on ....");
      System.out.println("thread1 is over!!!");
      }
    }
  }

  private static class Thread2 implements Runnable{
    @Override
    public void run(){
      synchronized (TestD.class) {
        System.out.println("enter thread2....");
        System.out.println("thread2 is sleep....");
        //只有針對此對象調(diào)用notify()方法后本線程才進入對象鎖定池準備獲取對象鎖進入運行狀態(tài)。
        TestD.class.notify();
        //==================
        //區(qū)別
        //如果我們把代碼:TestD.class.notify();給注釋掉,即TestD.class調(diào)用了wait()方法,但是沒有調(diào)用notify()
        //方法,則線程永遠處于掛起狀態(tài)。
        try {
          //sleep()方法導致了程序暫停執(zhí)行指定的時間,讓出cpu該其他線程,
          //但是他的監(jiān)控狀態(tài)依然保持者,當指定的時間到了又會自動恢復運行狀態(tài)。
          //在調(diào)用sleep()方法的過程中,線程不會釋放對象鎖。
          Thread.sleep(5000);
        } catch (Exception e) {
          e.printStackTrace();
        }
        System.out.println("thread2 is going on....");
        System.out.println("thread2 is over!!!");
      }
    }
  }
}

運行效果:

enter thread1...
thread1 is waiting...
enter thread2....
thread2 is sleep....
thread2 is going on....
thread2 is over!!!
thread1 is going on ....
thread1 is over!!!

如果注釋掉代碼:

1 TestD.class.notify();

運行效果:

enter thread1...
thread1 is waiting...
enter thread2....
thread2 is sleep....
thread2 is going on....
thread2 is over!!!

且程序一直處于掛起狀態(tài)。

如有疑問請留言或者到本站社區(qū)交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

相關文章

  • SpringBoot整合分布式鎖redisson的示例代碼

    SpringBoot整合分布式鎖redisson的示例代碼

    這篇文章主要介紹了SpringBoot整合分布式鎖redisson,本文結(jié)合實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-02-02
  • SpringBoot集成Prometheus實現(xiàn)監(jiān)控的過程

    SpringBoot集成Prometheus實現(xiàn)監(jiān)控的過程

    這篇文章主要介紹了SpringBoot集成Prometheus實現(xiàn)監(jiān)控,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-09-09
  • Java排序算法三之歸并排序的遞歸與非遞歸的實現(xiàn)示例解析

    Java排序算法三之歸并排序的遞歸與非遞歸的實現(xiàn)示例解析

    這篇文章主要介紹了Java排序算法三之歸并排序的遞歸與非遞歸的實現(xiàn)示例解析,文章通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-08-08
  • Java實現(xiàn)單向鏈表的基本功能詳解

    Java實現(xiàn)單向鏈表的基本功能詳解

    這篇文章主要給大家介紹了關于Java實現(xiàn)單向鏈表基本功能的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。
    2018-03-03
  • Java 單例模式詳細解釋

    Java 單例模式詳細解釋

    這篇文章主要給大家介紹了關于Java中四種單例模式的相關資料,其中包括餓漢式、懶漢式、懶漢式(雙重鎖)及內(nèi)部類等四種,分別給出了詳細的示例代碼和介紹,需要的朋友們下面來一起看看吧。
    2021-11-11
  • SpringBoot整合Lucene實現(xiàn)全文檢索的詳細步驟

    SpringBoot整合Lucene實現(xiàn)全文檢索的詳細步驟

    全文搜索(Full-Text?Search)是指對大規(guī)模存儲在計算機系統(tǒng)中的文本數(shù)據(jù)進行檢索和匹配的技術,它允許用戶輸入關鍵字,然后從海量的文本數(shù)據(jù)中快速找到相關的信息,本文介紹了SpringBoot整合Lucene實現(xiàn)全文檢索的詳細步驟,需要的朋友可以參考下
    2024-03-03
  • Java實現(xiàn)的進制轉(zhuǎn)換工具類完整示例

    Java實現(xiàn)的進制轉(zhuǎn)換工具類完整示例

    這篇文章主要介紹了Java實現(xiàn)的進制轉(zhuǎn)換工具類,結(jié)合完整實例形式分析了Java實現(xiàn)二進制、十六進制、字符串、數(shù)組等相關轉(zhuǎn)換操作技巧,需要的朋友可以參考下
    2018-07-07
  • 如何兩步解決maven依賴導入失敗的問題

    如何兩步解決maven依賴導入失敗的問題

    這篇文章主要介紹了如何兩步解決maven依賴導入失敗的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • springboot使用log4j2異步日志提升性能的實現(xiàn)方式

    springboot使用log4j2異步日志提升性能的實現(xiàn)方式

    這篇文章主要介紹了springboot使用log4j2異步日志提升性能,異步日志實現(xiàn)方式:將日志存入一個單獨的隊列中,有一個單獨的線程從隊列中獲取日志并寫入磁盤文件,需要的朋友可以參考下
    2022-05-05
  • JavaWeb實現(xiàn)郵件發(fā)送功能

    JavaWeb實現(xiàn)郵件發(fā)送功能

    這篇文章主要為大家詳細介紹了JavaWeb實現(xiàn)郵件發(fā)送功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-12-12

最新評論