【java面試題】java中wait和sleep有什么區(qū)別
sleep是使線程暫停執(zhí)行一段時(shí)間的方法。
wait是使線程暫停執(zhí)行的方法:當(dāng)wait執(zhí)行時(shí),會(huì)釋放鎖,讓出cpu執(zhí)行權(quán),進(jìn)入等待狀態(tài),并且可以調(diào)用notify方法或者notifyAll方法,通知正在等待的其他線程
第一,原理不同:sleep時(shí)thread類的靜態(tài)方法,是線程用來控制自身流程的,他會(huì)使此線程暫停執(zhí)行一段時(shí)間,讓出執(zhí)行權(quán),等時(shí)間一到,自動(dòng)蘇醒;而wait方法是object類中的方法。用于線程間的通信,這個(gè)方法會(huì)使得擁有對(duì)象鎖的進(jìn)程等待,直到其他線程調(diào)用notify方法或者notifyAll方法才能醒來,也可以指定時(shí)間讓其醒來;
第二,對(duì)鎖的處理機(jī)制不同;sleep方法主要作用是讓線程暫停執(zhí)行一段時(shí)間,時(shí)間一到自動(dòng)恢復(fù),不涉及線程的通信,因此不會(huì)釋放鎖,而wait方法會(huì)釋放掉他所占用的鎖,使得其他線程可以使用被鎖住的共享數(shù)據(jù);
第三,使用區(qū)域不同:wait方法必須放在同步控制方法和同步代碼塊中使用,sleep可以在任何地方使用,并且必須捕獲異常,而wait不需要捕獲異常。
標(biāo)簽: