1. 程式人生 > >java中wait和sleep的區別(多線程編程)

java中wait和sleep的區別(多線程編程)

釋放 catch 時間 編程 cpu 程序 all CA exception

sleep是thread中的一個方法,wait是object中的方法。

sleep是讓一個線程進入休眠狀態,在等待一段時間之後,進入可運行狀態,等待cpu分配資源並運行。同時sleep的過程中,有可能會被線程間的消息傳遞,也就是有可能被其他對象調用他的interrupt(),產生InterruptedException異常如果你的程序不捕獲這個異常,線程就會異常終止,進入TERMINATED狀態,如果你的程序捕獲了這個異常,那麽程序就會繼續執行catch語句塊(可能還有finally語句塊)以及以後的代碼。

註意sleep()方法是一個靜態方法,也就是說他只對當前對象有效,通過t.sleep()讓t對象進入sleep,這樣的做法是錯誤的,它只會是使當前線程被sleep 而不是t線程 。

wait屬於Object的成員方法,一旦一個對象調用了wait方法,必須要采用notify()和notifyAll()方法喚醒該進程;如果線程擁有某個或某些對象的同步鎖,那麽在調用了wait()後,這個線程就會釋放它持有的所有同步資源,而不限於這個被調用了wait()方法的對象。wait()方法也同樣會在wait的過程中有可能被其他對象調用interrupt()方法而產生

其實,我們對於sleep和wait最主要的區分就是sleep只是休眠,其並沒有釋放鎖,而wait方法釋放了鎖,使得其他線程可以使用同步控制塊或者方法。

java中wait和sleep的區別(多線程編程)