sleep 和 wait 有什麼區別

2021-06-18 06:52:12 字數 1784 閱讀 8524

(網上的答案:

sleep

是執行緒類(

thread

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

sleep

不會釋放物件鎖。

wait

是object

類的方法,對此物件呼叫

wait

方法導致本執行緒放棄物件鎖,進入等待此物件的等待鎖定池,只有針對此物件發出

notify

方法(或

notifyall

)後本執行緒才進入物件鎖定池準備獲得物件鎖進入執行狀態。)

sleep

就是正在執行的執行緒主動讓出

cpu,

cpu去執行其他執行緒,在

sleep

指定的時間過後,

cpu才會回到這個執行緒上繼續往下執行,如果當前執行緒進入了同步鎖,

sleep

方法並不會釋放鎖,即使當前執行緒使用

sleep

方法讓出了

cpu,但其他被同步鎖擋住了的執行緒也無法得到執行。

wait

是指在乙個已經進入了同步鎖的執行緒內,讓自己暫時讓出同步鎖,以便其他正在等待此鎖的執行緒可以得到同步鎖並執行,只有其他執行緒呼叫了

notify

方法(notify

並不釋放鎖,只是告訴呼叫過

wait

方法的執行緒可以去參與獲得鎖的競爭了,但不是馬上得到鎖,因為鎖還在別人手裡,別人還沒釋放。如果

notify

方法後面的**還有很多,需要這些**執行完後才會釋放鎖,可以在

notfiy

方法後增加乙個等待和一些**,看看效果),呼叫

wait

方法的執行緒就會解除

wait

狀態和程式可以再次得到鎖後繼續向下執行。對於

wait

的講解一定要配合例子**來說明,才顯得自己真明白。

packagecom.huawei.interview;

publicclassmultithreadcatch(interruptedexceptione)

newthread(newthread2()).start();   

}

private static classthread1implementsrunnable

catch(interruptedexceptione)

system.out.println("thread1isgoing on...");

system.out.println("thread1isbeing over!");      

} }

}

private static classthread2implementsrunnable

catch(interruptedexceptione)

system.out.println("thread2isgoing on...");

system.out.println("thread2isbeing over!");

} }

}

sleep 和 wait 有什麼區別?

1 這兩個方法來自不同的類分別是thread和object,sleep方法屬於thread類中的靜態方法,wait屬於object的成員方法。2 最主要是sleep方法沒有釋放鎖,而wait方法釋放了鎖,使得其他執行緒可以使用同步控制塊或者方法。3 wait,notify和notifyall只能在同...

sleep 和 wait 有什麼區別

網上的答案 sleep是執行緒類 thread 的方法,導致此執行緒暫停執行指定時間,給執行機會給其他執行緒,但是監控狀態依然保持,到時後會自動恢復。呼叫sleep不會釋放物件鎖。wait是object類的方法,對此物件呼叫wait方法導致本執行緒放棄物件鎖,進入等待此物件的等待鎖定池,只有針對此物...

sleep 和 wait 有什麼區別???

sleep 是thread類的方法,執行緒在執行的時候呼叫了sleep 之後會暫停執行,讓出cpu去執行其他執行緒,在sleep指定的時間過後,cpu才會回到這個執行緒上繼續往下執行,但是如果此執行緒也進入了同步鎖,那麼它會讓出cpu卻不會釋放物件鎖,後續需要同步鎖的執行緒也就依然不會執行 wait...