導航:首頁 > 編程語言 > javathreadwait

javathreadwait

發布時間:2025-07-18 17:35:36

java中的sleep和wait的區別

java中的sleep和wait的區別如下:
1、所屬的超類不同:sleep屬於線程Thread類的方法,而wait屬於Object方法
2、用法不同:
①sleep()方法導致了程序暫停執行指定的時間,讓出cpu該其他線程,但是他的監控狀態依然保持者,當指定的時間到了又會自動恢復運行狀態。
②調用wait()方法的時候,線程會放棄對象鎖,進入等待此對象的等待鎖定池,只有針對此對象調用notify()方法後本線程才進入對象鎖定池准備
3、舉例說明:
wait方法:
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!!!");
}
}
}
sleep方法用法:
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

㈡ Java Thread BLOCKED和WAITING兩種狀態的區別

BLOCKED狀態
線程處於BLOCKED狀態的場景。
當前線程在等待一個monitor lock,比如等待執行synchronized代碼塊或者使用synchronized標記的方法。
在synchronized塊中循環調用Object類型的wait方法,如下是樣例
synchronized(this)
{
while (flag)
{
obj.wait();
}
// some other code
}
WAITING狀態
線程處於WAITING狀態的場景。
調用Object對象的wait方法,但沒有指定超時值。
調用Thread對象的join方法,但沒有指定超時值。
調用LockSupport對象的park方法。
提到WAITING狀態,順便提一下TIMED_WAITING狀態的場景。
TIMED_WAITING狀態
線程處於TIMED_WAITING狀態的場景。
調用Thread.sleep方法。
調用Object對象的wait方法,指定超時值。
調用Thread對象的join方法,指定超時值。
調用LockSupport對象的parkNanos方法。
調用LockSupport對象的parkUntil方法。

㈢ java wait

java wait是怎樣的呢?下面就讓我們一起來了解一下吧:
wait()方法是屬於java中的一個方法,它的作用是能夠讓當前線程進入等待狀態,同時,wait()也會讓當前線程釋放它所持有的鎖。直到其他線程調用此對象的notify()方法或者notifyAll()方法,當前線程被喚醒(也就是進入「就緒狀態」)。
說明:
notify()和notifyAll()方法的作用,則是用於喚醒當前對象上的等待線程;notify()方法是喚醒單個線程,而notifyAll()是喚醒所有的線程。
參考範例:
packagecom.citi.test.mutiplethread.demo0503;importjava.util.Date;publicclassWaitTest{publicstaticvoidmain(String[]args){ThreadAt1=newThreadA(t1);System.out.println(t1:+t1);synchronized(t1){try{//啟動線程System.out.println(Thread.currentThread().getName()+startt1);t1.start();//主線程等待t1通過notify喚醒。System.out.println(Thread.currentThread().getName()+wait()+newDate());t1.wait();//不是使t1線程等待,而是當前執行wait的線程等待System.out.println(Thread.currentThread().getName()+continue+newDate());}catch(Exceptione){e.printStackTrace();}}}}classThreadAextendsThread{publicThreadA(Stringname){super(name);}@Overridepublicvoidrun(){synchronized(this){System.out.println(this:+this);try{Thread.sleep(2000);//使當前線程阻塞1秒}catch(InterruptedExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}System.out.println(Thread.currentThread().getName()+callnotify());this.notify();}}}

閱讀全文

與javathreadwait相關的資料

熱點內容
第三胸椎壓縮骨折什麼症狀 瀏覽:500
如何查網址有沒有加密 瀏覽:418
怎麼獲得伺服器神裝 瀏覽:612
分析編譯信息 瀏覽:360
大數據和java和區別 瀏覽:49
ios和java哪個好 瀏覽:294
思維語言pdf 瀏覽:313
緩存域名伺服器是干什麼 瀏覽:485
京東雲伺服器學生優惠 瀏覽:930
程序員問禪師視頻 瀏覽:601
交互服務伺服器地址 瀏覽:223
單片機模擬實訓實驗報告 瀏覽:770
在linux下修改mysql密碼 瀏覽:21
買小玩具的app叫什麼 瀏覽:705
阿里伺服器是什麼 瀏覽:969
超激斗夢境重新連接伺服器是怎麼回事 瀏覽:598
cg用什麼app好 瀏覽:637
伯格空氣壓縮機 瀏覽:795
程序員是什麼職業病 瀏覽:623
學生買口紅用什麼app 瀏覽:895