(1) 這兩個方法來自不同的類分別是Thread和Object
(2)最主要是sleep方法沒有釋放鎖饰抒,而wait方法釋放了鎖坑鱼,使得其他線程可以使用同步控制塊或者方法咽白。
(3)wait备埃,notify和notifyAll只能在同步控制方法或者同步控制塊里面使用节槐,而sleep可以在任何地方使用(使用范圍)
(4)sleep必須捕獲異常,而wait锯仪,notify和notifyAll不需要捕獲異常
簡單的說
-
sleep
就是正在執(zhí)行的線程主動讓出cpu泵督,cpu去執(zhí)行其他線程,在sleep指定的時間過后庶喜,cpu才會回到這個線程上繼續(xù)往下執(zhí)行小腊,如果當(dāng)前線程進(jìn)入了同步鎖,sleep方法并不會釋放鎖久窟,即使當(dāng)前線程使用sleep方法讓出了cpu秩冈,但其他被同步鎖擋住了的線程也無法得到執(zhí)行。 -
wait
是指在一個已經(jīng)進(jìn)入了同步鎖的線程內(nèi)斥扛,讓自己暫時讓出同步鎖入问,以便其他正在等待此鎖的線程可以得到同步鎖并運行,只有其他線程調(diào)用了notify方法(notify并不釋放鎖犹赖,只是告訴調(diào)用過wait方法的線程可以去參與獲得鎖的競爭了队他,但不是馬上得到鎖,因為鎖還在別人手里峻村,別人還沒釋放麸折。如果notify方法后面的代碼還有很多,需要這些代碼執(zhí)行完后才會釋放鎖粘昨,可以在notfiy方法后增加一個等待和一些代碼垢啼,看看效果),調(diào)用wait方法的線程就會解除wait狀態(tài)和程序可以再次得到鎖后繼續(xù)向下運行张肾。