JAVA sleep與wait的區別

2021-08-22 19:45:37 字數 586 閱讀 1738

(1)sleep用於執行緒控制自身的流程,使自己暫停指定的時間,把執行機會讓給其他執行緒,時間到,則自動甦醒。

(2)wait為object類的方法(object類中的其他方法見object類的方法簡談),用於執行緒之間的通訊,會使擁有當前物件鎖的執行緒等待,直到其他執行緒呼叫notify或notifyall方法才醒來。當然也可以指定時間,時間到,則自動醒來。

(1)sleep不涉及執行緒之間的通訊,呼叫sleep方法不會釋放鎖

(2)wait方法,執行緒會釋放掉它所占用的鎖,從而使得該執行緒所在的物件中的synchronized資料被其他執行緒使用。

(1)sleep方法可以放在任何地方使用,不用加任何限制

(2)wait方法必須放在同步控制方法或者同步語句塊中使用

(1)sleep方法必須捕獲異常,因為在某個執行緒的sleep過程中,有可能被其他物件呼叫它的interrupt方法,從而產生interruptedexception異常,因此需要捕獲。

(2)wait、notify和notifyall方法都不需要捕獲異常

由於sleep方法不會釋放物件鎖,容易導致死鎖問題的產生。因此,在一般的情況下,不推薦使用sleep方法,而推薦使用wait方法。

java sleep與wait的區別

最近被問到這個問題,查詢資料後寫個例子,可看出其中差別。1 首先wait是object的方法,sleep是thread的方法。2 object.wait被某執行緒呼叫,要確保該執行緒能監控該物件,否則丟擲illegalmonitorstateexception。之後該執行緒放棄對次object的sy...

java sleep 和wait 的區別

1 這兩個方法來自不同的類分別是,sleep來自thread類,和wait來自object類。sleep是thread的靜態類方法,誰呼叫的誰去睡覺,即使在a執行緒裡呼叫了b的sleep方法,實際上還是a去睡覺,要讓b執行緒睡覺要在b的 中呼叫sleep。2 最主要是sleep方法沒有釋放鎖,而wa...

Java sleep和wait例項比較

1 示例 public class testsyncro class thread1 extends thread override public void run class thread2 extends thread override public void run class personc...