多線程中wait和sleep方法的區別

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