wait 和sleep 的區別

2021-09-20 04:12:00 字數 955 閱讀 3946

都能阻塞執行緒。

sleep()是thread類方法,wait()是object類方法

sleep()釋放cpu執行權,但不釋放鎖

wait()釋放cpu執行權,也釋放同步鎖,使得其他執行緒可以訪問同步**方法。

為什麼wait(),notify()函式定義在object中,而不是thread中?

wait(),notify()函式是對物件的同步鎖進行操作。

wait()會使當前執行緒進行等待,因為執行緒進入等待狀態,執行緒會釋放它持有的同步鎖,否則其他執行緒獲取不到同步鎖無法執行。

負責喚醒等待執行緒的那個執行緒叫做喚醒執行緒,它只有獲取了同步鎖,並呼叫物件的notify()方法,才能喚醒等待的執行緒。

等待執行緒被喚醒也不能立即執行。它只有等喚醒執行緒釋放了同步鎖,等待執行緒才能獲得鎖,然後執行。

void notify() 喚醒在此物件監視器上等待的單個執行緒。

void notifyall() 喚醒在此物件監視器上等待的所有執行緒。

void wait() 導致當前的執行緒等待,直到其他執行緒呼叫此物件的notify()方法或notifyall()方法。

void wait(long timeout) 導致當前的執行緒等待,直到其他執行緒呼叫此物件的notify()方法或notifyall()方法,或者超過指定的時間量。

void wait(long timeout, int nanos) 導致當前的執行緒等待,直到其他執行緒呼叫此物件的notify()方法或notifyall()方法,或者其他某個執行緒中斷當前執行緒,或者已超過某個實際時間量。

jdk動態**:**類和目標類實現相同的介面,使用invocationhandler介面

cglib動態**:**類是目標類的子類,用到methodinterceptor介面。

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