sleep與 wait區別主要是對cpu的占用

2021-06-22 16:32:55 字數 545 閱讀 1042

sleep是執行緒被呼叫時,佔著cpu去睡覺,其他執行緒不能占用cpu,os認為該執行緒正在工作,不會讓出系統資源,wait是進入等待池等待,讓出系統資源,其他執行緒可以占用cpu,一般wait不會加時間限制,因為如果wait的執行緒執行資源不夠,再出來也沒用,要等待其他執行緒呼叫notifyall方法喚醒等待池中的所有執行緒,才會在進入就緒序列等待os分配系統資源, 

sleep是靜態方法,是誰掉的誰去睡覺,就算是在main執行緒裡呼叫了執行緒b的sleep方法,實際上還是main去睡覺,想讓執行緒b去睡覺要在b的**中掉sleep

sleep(100l)是占用cpu,執行緒休眠100毫秒,其他程序不能再占用cpu資源,wait(100l)是進入等待池中等待,交出cpu等系統資源供其他程序使用,在這100毫秒中,該執行緒可以被其他執行緒notify,但不同的是其他在等待池中的執行緒不被notify不會出來,但這個執行緒在等待100毫秒後會自動進入就緒佇列等待系統分配資源,換句話說,sleep(100)在100毫秒後肯定會執行,但wait在100毫秒後還有等待os呼叫分配資源,所以wait100的停止執行時間是不確定的,但至少是100毫秒。

sleep與wait的區別

sleep與wait的區別 1.都是執行緒狀態切換的操作 2.sleep一定時間後會自動喚醒,wait則需要手動notify或notifyall 3.sleep不會釋放物件鎖,thread方法 wait會放棄物件鎖,是object方法,執行後會進入等待物件鎖池的佇列中 4.notify並不會釋放鎖,...

sleep與wait的區別

sleep 就是正在執行的執行緒主動讓出 cpu,cpu 去執行其他執行緒,在 sleep 指定的時間過後,cpu 才會回到這個執行緒上繼續往下執行,如果當前執行緒進入了同步鎖,sleep 方法並不會釋 放鎖,即使當前執行緒使用 sleep 方法讓出了 cpu,但其他被同步鎖擋住了的執行緒也無 法得...

sleep()與wait()的區別

sleep,wait如例子 店 public class 店 消費麵包 public void take public boolean isempety public boolean isfull 生產者 public class 生產者 implements runnable override p...