91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java項目中中sleep()與wait()有什么不同

發布時間:2020-11-19 15:50:13 來源:億速云 閱讀:144 作者:Leah 欄目:編程語言

本篇文章給大家分享的是有關Java項目中中sleep()與wait()有什么不同,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

前言

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

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

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

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

獲取對象鎖進入運行狀態。

什么意思呢?

舉個列子說明:

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

/**
 * java中的sleep()和wait()的區別
 * @author Hongten
 * @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 {
    //調用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....");
    //只有針對此對象調用notify()方法后本線程才進入對象鎖定池準備獲取對象鎖進入運行狀態。
    TestD.class.notify();
    //==================
    //區別
    //如果我們把代碼:TestD.class.notify();給注釋掉,即TestD.class調用了wait()方法,但是沒有調用notify()
    //方法,則線程永遠處于掛起狀態。
    try {
     //sleep()方法導致了程序暫停執行指定的時間,讓出cpu該其他線程,
     //但是他的監控狀態依然保持者,當指定的時間到了又會自動恢復運行狀態。
     //在調用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!!!

如果注釋掉代碼:

TestD.class.notify();

運行效果:

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

且程序一直處于掛起狀態。

以上就是Java項目中中sleep()與wait()有什么不同,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

长丰县| 丰都县| 衡东县| 故城县| 观塘区| 镇康县| 龙江县| 岗巴县| 林西县| 常德市| 呈贡县| 乌兰察布市| 汤阴县| 家居| 卢湾区| 荆州市| 达州市| 四平市| 雷州市| 甘孜县| 水富县| 汝州市| 夏邑县| 六安市| 溧阳市| 北京市| 平果县| 江陵县| 佛学| 安丘市| 龙南县| 五常市| 凭祥市| 万全县| 古浪县| 枣庄市| 贵定县| 凉城县| 桦川县| 虹口区| 石台县|