1. 程式人生 > >sleep和wait有什麼區別?

sleep和wait有什麼區別?

對時間的指定。
1,sleep方法必須指定時間。
2,wait方法有過載形式,可以指定時間,也可以不指定時間。

對於執行權和鎖的操作.:
1,sleep():釋放執行權,不釋放鎖,因為肯定能醒,肯定可以恢復到臨時阻塞狀態。
2,wait():釋放執行權,釋放鎖,因為wait不釋放鎖,如果沒有時間指定,那麼其他執行緒都進行不了同步中,無法將其喚醒。

記住:同步中可以有多個存活的執行緒,但是隻能有一個執行同步的程式碼。因為只有一個執行緒會持有同步的鎖。

只有當該執行緒釋放了鎖,其他執行緒才會有機會獲取到鎖,而且只能用一個執行緒獲取到鎖,繼續執行。

  補充:

   1、這兩個方法來自不同的類分別是Thread和Object

  2、最主要是sleep方法沒有釋放鎖,而 wait 方法釋放了鎖,使得其他執行緒可以使用同步控制塊或者方法。
  3、wait,notify和notifyAll只能在同步控制方法或者同步控制塊裡面使用,而sleep可以在任何地方使用(使用範圍)
  synchronized(x){
   x.notify()
   //或者wait()
  }
  4、sleep必須捕獲異常,而wait,notify和notifyAll不需要捕獲異常
  擴充閱讀:
  java 執行緒中的sleep和wait有一個共同作用,停止當前執行緒任務執行。