您好,登錄后才能下訂單哦!
本篇文章給大家分享的是有關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()有什么不同,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。