sleep 和 wait 的區別

2022-08-03 22:33:21 字數 1700 閱讀 4982

好多面經上都出現了,有必要好好熟悉一下

區別:1、wait() 可以指定時間,也可以不指定(等五分鐘你進來,或者是不叫你一直等著);sleep()必須指定時間(不能一睡不起)

2、wait()是object類中的方法,而sleep()是thread類中的方法

3、在同步中,對cpu執行權和鎖的處理不同

wait():釋放執行權,釋放鎖(cpu執行權不釋放的話,宕機)

sleep():釋放執行權,不釋放鎖

有意思的解釋,幫助記憶:

sleep:意思是睡覺,睡覺能夠自然醒

wait:意思是等待,等待的話需要人叫

**:參照dreamsea530:加深理解(在原**基礎上加了一句列印語句,更容易理解了)

先看wait()方法:

1

package

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 }

view code

結果:110

22000

先列印出110,因為wait()方法會釋放鎖,所以,子執行緒可以進入到firstmethod();等待(wait)2s後列印22000,如果此時在firstmethod()列印輸出完成後呼叫this.notify();就可以取消等待的2s

再看sleep()方法:

1

package

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 }

view code

結果: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...