java中的sleep()和wait()的区别
生活随笔
收集整理的這篇文章主要介紹了
java中的sleep()和wait()的区别
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
對于sleep()方法,我們首先要知道該方法是屬于Thread類中的。而wait()方法,則是屬于Object類中的。
//對TestD.class加鎖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!!!");}}} }
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{@Overridepublic 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{@Overridepublic void run(){//對TestD.class加鎖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!!!");}}} }
?
總結
以上是生活随笔為你收集整理的java中的sleep()和wait()的区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: tomcat中的目录映射
- 下一篇: CentOS 6.3 编译安装 Ngin