wait
是Object的方法,而sleep
是Thread的方法。sleep
方法不會釋放鎖,能夠定義時間,時間事後會自動喚醒。wait
方法會釋放鎖。 sleep
不會釋放資源,wait
進入線程等待池等待,出讓系統資源,其它線程能夠佔用CPU。通常wait
不會加時間限制,這是由於若是wait
線程運行的資源不夠,再出來也沒用,要等待其它線程調用notify
或notifyAll
喚醒等待池中全部線程,纔會進入就緒隊列等待OS分配系統資源。sleep(milliseconds)
能夠用時間指定使它自動喚醒,若是時間不到,只能用interrupt()
強行打斷。wait
、notify
、notifyAll
只能在同步控制方法或同步控制塊中使用,而sleep
能夠任何地方使用。sleep
必須捕獲異常,wait
、notify
、notifyAll
則不用。