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有一個共同作用,停止當前執行緒任務執行。