sleep 和wait 的區別

2021-09-28 20:39:18 字數 1842 閱讀 7932

區別

1.

sleep

()方法屬於thread類,而wait

()屬於當前物件;

2.sleep

()可以在任何地方使用,而wait

()只能在同步方法或同步**塊中使用;

3.sleep

()會在指定的時間後重新恢復就緒狀態,而wait

()如果沒有設定超時時間,需要當前物件的其他執行緒呼叫notify

()方法或者notifyall

()重新喚醒執行緒進入就緒狀態;

4.只有在同步方法或者同步**塊中呼叫了sleep()

,當前執行緒才會一直占用著物件鎖,而不會釋放資源,其他執行緒則無法進入該同步方法或同步**塊中。而如果當前執行緒呼叫了wait

()方法,會釋放已獲取的物件鎖資源,並進入等待佇列,其他執行緒就可以獲取物件上的鎖資源。

相同點
1.都可以通過thread.interrupt來中斷當前執行緒
下面是乙個關於sleep()和wait()鎖釋放的示例:

示例如下

public

class

testd

catch

(exception e)

newthread

(new

thread2()

).start()

;}private

static

class

thread1

implements

runnable

catch

(exception e)

system.out.

println

("thread1 is going on ....");

system.out.

println

("thread1 is over!!!");

}}}// private static class thread2 implements runnable catch (exception e)

// system.out.println("thread2 is going on....");

// system.out.println("thread2 is over!!!");

// }

// }

// }

//把上面的方法注釋去掉,把下面的類新增注釋,重新執行,對比一下有什麼不同

private

static

class

thread2

implements

runnable

//***************===

//區別

//如果我們把**:testd.class.notify();給注釋掉,即testd.class呼叫了wait()方法,但是沒有呼叫notify()

//方法,則執行緒永遠處於掛起狀態。

trycatch

(exception e)

system.out.

println

("thread2 is going on....");

system.out.

println

("thread2 is over!!!");

}}}

針對上面的示例做一下簡要說明:上面兩個thread2類的區別在於,最下面thread2類的synchronized僅僅是包裹了notify方法,而上面thread2類的synchronized包裹了整個run()方法。

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...