4、sleep必須捕獲異常,而wait,notify和notifyAll不需要捕獲異常
sleep方法屬于Thread類中方法,表示讓一個線程進入睡眠狀態(tài),等待一定的時間之后,自動醒來進入到可運行狀態(tài),不會馬上進入運行狀態(tài),因為線程調(diào)度機制恢復(fù)線程的運行也需要時間,一個線程對象調(diào)用了sleep方法之后,并不會釋放他所持有的所有對象鎖,所以也就不會影響其他進程對象的運行。但在sleep的過程中有可能被其他對象調(diào)用它的interrupt(),產(chǎn)生InterruptedException異常,如果你的程序不捕獲這個異常,線程就會異常終止,進入TERMINATED狀態(tài),如果你的程序捕獲了這個異常,那么程序就會繼續(xù)執(zhí)行catch語句塊(可能還有finally語句塊)以及以后的代碼。
注意sleep()方法是一個靜態(tài)方法,也就是說他只對當(dāng)前對象有效,通過t.sleep()讓t對象進入sleep,這樣的做法是錯誤的,它只會是使當(dāng)前線程被sleep 而不是t線程。
wait屬于Object的成員方法,一旦一個對象調(diào)用了wait方法,必須要采用notify()和notifyAll()方法喚醒該進程;如果線程擁有某個或某些對象的同步鎖,那么在調(diào)用了wait()后,這個線程就會釋放它持有的所有同步資源,而不限于這個被調(diào)用了wait()方法的對象。wait()方法也同樣會在wait的過程中有可能被其他對象調(diào)用interrupt()方法而產(chǎn)生InterruptedException,效果以及處理方式同sleep()方法。
|
新聞熱點
疑難解答