java中的sleep()和wait()的区别
生活随笔
收集整理的這篇文章主要介紹了
java中的sleep()和wait()的区别
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
對(duì)于sleep()方法,我們首先要知道該方法是屬于Thread類(lèi)中的。而wait()方法,則是屬于Object類(lèi)中的。
//對(duì)TestD.class加鎖synchronized (TestD.class) {System.out.println("enter thread2....");System.out.println("thread2 is sleep....");//只有針對(duì)此對(duì)象調(diào)用notify()方法后本線程才進(jìn)入對(duì)象鎖定池準(zhǔn)備獲取對(duì)象鎖進(jìn)入運(yùn)行狀態(tài)。TestD.class.notify();//==================//區(qū)別//如果我們把代碼:TestD.class.notify();給注釋掉,即TestD.class調(diào)用了wait()方法,但是沒(méi)有調(diào)用notify()//方法,則線程永遠(yuǎn)處于掛起狀態(tài)。try {//sleep()方法導(dǎo)致了程序暫停執(zhí)行指定的時(shí)間,讓出cpu該其他線程,//但是他的監(jiān)控狀態(tài)依然保持者,當(dāng)指定的時(shí)間到了又會(huì)自動(dòng)恢復(fù)運(yùn)行狀態(tài)。//在調(diào)用sleep()方法的過(guò)程中,線程不會(huì)釋放對(duì)象鎖。Thread.sleep(5000);} catch (Exception e) {e.printStackTrace();}System.out.println("thread2 is going on....");System.out.println("thread2 is over!!!");}}} }
sleep()方法導(dǎo)致了程序暫停執(zhí)行指定的時(shí)間,讓出cpu該其他線程,但是他的監(jiān)控狀態(tài)依然保持者,當(dāng)指定的時(shí)間到了又會(huì)自動(dòng)恢復(fù)運(yùn)行狀態(tài)。
在調(diào)用sleep()方法的過(guò)程中,線程不會(huì)釋放對(duì)象鎖。
?
而當(dāng)調(diào)用wait()方法的時(shí)候,線程會(huì)放棄對(duì)象鎖(仍然持有資源),進(jìn)入等待此對(duì)象的等待鎖定池,只有針對(duì)此對(duì)象調(diào)用notify()方法后本線程才進(jìn)入對(duì)象鎖定池準(zhǔn)備獲取對(duì)象鎖進(jìn)入運(yùn)行狀態(tài)。
/*** */ package com.b510.test;/*** java中的sleep()和wait()的區(qū)別* @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 {//調(diào)用wait()方法,線程會(huì)放棄對(duì)象鎖,進(jìn)入等待此對(duì)象的等待鎖定池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(){//對(duì)TestD.class加鎖synchronized (TestD.class) {System.out.println("enter thread2....");System.out.println("thread2 is sleep....");//只有針對(duì)此對(duì)象調(diào)用notify()方法后本線程才進(jìn)入對(duì)象鎖定池準(zhǔn)備獲取對(duì)象鎖進(jìn)入運(yùn)行狀態(tài)。TestD.class.notify();//==================//區(qū)別//如果我們把代碼:TestD.class.notify();給注釋掉,即TestD.class調(diào)用了wait()方法,但是沒(méi)有調(diào)用notify()//方法,則線程永遠(yuǎn)處于掛起狀態(tài)。try {//sleep()方法導(dǎo)致了程序暫停執(zhí)行指定的時(shí)間,讓出cpu該其他線程,//但是他的監(jiān)控狀態(tài)依然保持者,當(dāng)指定的時(shí)間到了又會(huì)自動(dòng)恢復(fù)運(yùn)行狀態(tài)。//在調(diào)用sleep()方法的過(guò)程中,線程不會(huì)釋放對(duì)象鎖。Thread.sleep(5000);} catch (Exception e) {e.printStackTrace();}System.out.println("thread2 is going on....");System.out.println("thread2 is over!!!");}}} }
?
總結(jié)
以上是生活随笔為你收集整理的java中的sleep()和wait()的区别的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: tomcat中的目录映射
- 下一篇: CentOS 6.3 编译安装 Ngin