sleep和wait有什麼區別?
阿新 • • 發佈:2019-02-02
對時間的指定。
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有一個共同作用,停止當前執行緒任務執行。