1. 程式人生 > >wait、join、sleep、yield的區別

wait、join、sleep、yield的區別

函式名 作用
wait()

當一個執行緒執行到wait()方法時,它就進入到一個和該物件相關的等待池中,同時失去(釋放)了物件鎖機制

,使得其他執行緒可以訪問。使用者可以用notify、notifyAll或者指定睡眠時間來喚醒當前等待池中的執行緒。

注意:wait()、notify()、notifyAll()必須放在synchronized block中,否則會丟擲異常

sleep

該函式是Thread的靜態函式,作用是使呼叫執行緒進入睡眠狀態。因為sleep()是Thread類的靜態方法,所

以他不能改變物件的機鎖。所以在一個Synchronized塊中呼叫Sleep()方法時執行緒雖然休眠了,但是物件的機鎖並沒有釋放,

其他執行緒也無法訪問這個物件(即使睡著也持有物件鎖)

join 等待目標執行緒執行完成之後再繼續執行
yield 執行緒禮讓。目標執行緒由執行狀態進入就緒狀態,也就是讓出執行許可權,讓其他執行緒得以優先執行,但其他執行緒能否優先執行是未知的