wait sleep join方法的區別

2021-09-27 01:25:14 字數 893 閱讀 8595

相同點:

他們都是在多執行緒的環境下,都可以在程式的呼叫處阻塞指定的毫秒數,並返回。

wait()和sleep()都可以通過interrupt()方法 打斷執行緒的暫停狀態 ,從而使執行緒立刻丟擲interruptedexception。 如果執行緒a希望立即結束執行緒b,則可以對執行緒b對應的thread例項呼叫interrupt方法。如果此刻執行緒b正在wait/sleep/join,則執行緒b會立刻丟擲interruptedexception,在catch(){} 中直接return即可安全地結束執行緒。 需要注意的是,interruptedexception是執行緒自己從內部丟擲的,並不是interrupt()方法丟擲的。對某一線程呼叫 interrupt()時,如果該執行緒正在執行普通的**,那麼該執行緒根本就不會丟擲interruptedexception。但是,一旦該執行緒進入到

wait()/sleep()/join()後,就會立刻丟擲interruptedexception 。

不同點 :

sleep方法沒有釋放鎖,而wait方法釋放了鎖,使得其他執行緒可以使用同步控制塊或者方法。

wait,notify和notifyall只能在同步控制方法或者同步控制塊裡面使用,而sleep可以在任何地方使用

sleep必須捕獲異常,而wait,notify和notifyall不需要捕獲異常

sleep是執行緒類(thread)的方法,導致此執行緒暫停執行指定時間,給執行機會給其他執行緒,但是監控狀態依然保持,到時後會自動恢復。呼叫sleep不會釋放物件鎖。

wait是object類的方法,對此物件呼叫wait方法導致本執行緒放棄物件鎖,進入等待此物件的等待鎖定池,只有針對此物件發出notify方法(或notifyall)後本執行緒才進入物件鎖定池準備獲得物件鎖進入就緒狀態

方法的呼叫 this方法 構造方法

1 呼叫者和被呼叫者方法位於同一類中,呼叫形式如下 this 方法名 在大多數情況下,關鍵字this可以忽略 呼叫者位於被呼叫方法所在類的外部 物件名.方法名或者類名.方法名 抽象類只能作為父類,不能例項化。只能被繼承 抽象方法是一種只有方法宣告而沒有方法體定義的特殊方法,最後有乙個分號 而沒有方法...

例項方法 靜態方法 類方法

首先新建乙個日期date類,屬性為年,月,日,tomorrow 是例項方法,這個最常見,比較簡單,例項方法的第乙個引數是例項物件self 當我們傳入的年月日是2018 6 4這樣的形式,我們就需要先進行字串處理,在這裡使用了元組的拆包 這是最基本的方式,但是這樣寫會有乙個問題,每次傳參都需要進行字串...

類方法 物件方法 原型方法

js類方法,物件方法,原型的理解 function people name 類方法 people.run function 原型方法 people.prototype.introducechinese function 測試 var p1 new people windking p1.introdu...