sleep 和 wait 有什麼區別

2021-10-06 11:07:58 字數 1292 閱讀 6736

(網上的答案: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的講解一定要配合例子**來說明,才顯得自己真明白。

package com.huawei.interview;

public class multithread catch (interruptedexception e)

new thread(new thread2(

)).start();

} private static class thread1 implements runnable

catch (interruptedexception e)

system.out.println(

"thread1 is going on...");

system.out.println(

"thread1 is being over!");

}}}private static class thread2 implements runnable

catch (interruptedexception e)

system.out.println(

"thread2 is going on...");

system.out.println(

"thread2 is being over!");

}}}}

sleep 和 wait 有什麼區別

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

sleep 和 wait 有什麼區別?

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

sleep 和 wait 有什麼區別???

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