(網上的答案:
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...