好多面經上都出現了,有必要好好熟悉一下
區別:1、wait() 可以指定時間,也可以不指定(等五分鐘你進來,或者是不叫你一直等著);sleep()必須指定時間(不能一睡不起)
2、wait()是object類中的方法,而sleep()是thread類中的方法
3、在同步中,對cpu執行權和鎖的處理不同
wait():釋放執行權,釋放鎖(cpu執行權不釋放的話,宕機)
sleep():釋放執行權,不釋放鎖
有意思的解釋,幫助記憶:
sleep:意思是睡覺,睡覺能夠自然醒
wait:意思是等待,等待的話需要人叫
**:參照dreamsea530:加深理解(在原**基礎上加了一句列印語句,更容易理解了)
先看wait()方法:
1view codepackage
com.mianshi.easy;
2/**
3* thread sleep和wait區別4*
@author
dreamsea
5* 2015-7-176*/
7public
class threadtest implements
runnable 19}
2021
public
void secondmethod() throws
exception 34}
3536
public
void
run() catch
(exception e) 44}
4546
public
static
void main(string args) throws
exception
54 }
結果:110
22000
先列印出110,因為wait()方法會釋放鎖,所以,子執行緒可以進入到firstmethod();等待(wait)2s後列印22000,如果此時在firstmethod()列印輸出完成後呼叫this.notify();就可以取消等待的2s
再看sleep()方法:
1view codepackage
com.mianshi.easy;
2/**
3* thread sleep和wait區別4*
@author
dreamsea
5* 2015-7-176*/
7public
class threadtest implements
runnable 19}
2021
public
void secondmethod() throws
exception 34}
3536
public
void
run() catch
(exception e) 44}
4546
public
static
void main(string args) throws
exception
54 }
結果:2000
2100
先睡(sleep)2s,這兩秒內,沒有釋放鎖,所以子執行緒無法進入firstmethod();到2s後幾乎同時列印2000和2100
sleep和wait的區別
關鍵字 sleep wait 1 這兩個方法來自不同的類分別是thread和object 2 最主要是sleep方法沒有釋放鎖,而wait方法釋放了鎖,使得其他執行緒可以使用同步控制塊或者方法。3 wait,notify和notifyall只能在同步控制方法或者同步控制塊裡面使用,而sleep可以在...
sleep 和 wait的區別
1 這兩個方法來自不同的類分別是,sleep來自thread類,和wait來自object類。sleep是thread的靜態類方法,誰呼叫的誰去睡覺,即使在a執行緒裡呼叫了b的sleep方法,實際上還是a去睡覺,要讓b執行緒睡覺要在b的 中呼叫sleep。2 最主要是sleep方法沒有釋放鎖,而wa...
sleep和wait的區別
1 這兩個方法來自不同的類分別是,sleep來自thread類,和wait來自object類。sleep是thread的靜態類方法,誰呼叫的誰去睡覺,即使在a執行緒裡呼叫了b的sleep方法,實際上還是a去睡覺,要讓b執行緒睡覺要在b的 中呼叫sleep。2 最主要是sleep方法沒有釋放鎖,而wa...