1. 程式人生 > >Thread類的sleep()方法和對象的wait()方法都可以讓線程暫停執行,它們有什麽區別? 線程的sleep()方法和yield()方法有什麽區別?

Thread類的sleep()方法和對象的wait()方法都可以讓線程暫停執行,它們有什麽區別? 線程的sleep()方法和yield()方法有什麽區別?

阻塞 可移植性 喚醒 ora 暫停 obj 狀態 ati 對象

Thread類的sleep()方法和對象的wait()方法都可以讓線程暫停執行,它們有什麽區別?

  sleep()方法(休眠)是線程類(Thread)的靜態方法,調用此方法會讓當前線程暫停執行指定的時間,將執行機會(CPU)讓給其他線程,但是對象的鎖依然保持,因此休眠時間結束後會自動恢復。wait()是Object類的方法,調用對象的wait()方法導致當前線程放棄對象的鎖(線程暫停執行),進入對象的等待池(wait pool),只有調用對象的notify()方法(或notifyAll()方法)時才能喚醒等待池中的線程進入等鎖池(lock pool),如果線程重新獲得對象的鎖就可以進入就緒狀態。

線程的sleep()方法和yield()方法有什麽區別?

 ① sleep()方法給其他線程運行機會時不考慮線程的優先級,因此會給低優先級的線程以運行的機會

  yield()方法只會給相同優先級或更高優先級的線程以運行的機會
② 線程執行sleep()方法後轉入阻塞(blocked)狀態,而執行yield()方法後轉入就緒(ready)狀態
③ sleep()方法聲明拋出InterruptedException,而yield()方法沒有聲明任何異常;
④ sleep()方法比yield()方法(跟操作系統CPU調度相關)具有更好的可移植性。

Thread類的sleep()方法和對象的wait()方法都可以讓線程暫停執行,它們有什麽區別? 線程的sleep()方法和yield()方法有什麽區別?