java wait 和 sleep

這兩個方法來自不一樣的類分別是:操作系統

一、sleep來自Thread類,和wait來自Object類。 sleep是Thread的靜態類方法,誰調用的誰去睡覺,即便在a線程裏調用了b的sleep方法,實際上仍是a去睡覺,要讓b線程睡覺要在b的代碼中調用sleep。線程

二、 最主要是sleep方法沒有釋放鎖,而wait方法釋放了鎖,使得敏感詞線程能夠使用同步控制塊或者方法。 sleep不出讓系統資源;wait是進入線程等待池等待,出讓系統資源敏感詞線程能夠佔用CPU。通常wait不會加時間限制,由於若是wait線程的運行資源不夠,再出來也沒用,要等待敏感詞線程調用notify/notifyAll喚醒等待池中的全部線程,纔會進入就緒隊列等待OS分配系統資源。sleep(milliseconds)能夠用時間指定使它自動喚醒過來,若是時間不到只能調用interrupt()強行打斷。 Thread.Sleep(0)的做用是「觸發操做系統馬上從新進行一次CPU競爭」。隊列

三、使用範圍:wait,notify和notifyAll只能在同步控制方法或者同步控制塊裏面使用,而sleep能夠在任何地方使用 synchronized(x){ x.notify() //或者wait() }資源

四、sleep、wait必須捕獲異常,notify和notifyAll不須要捕獲異常同步

相關文章
相關標籤/搜索