多執行緒sleep與wait的區別

2021-09-12 05:56:13 字數 1384 閱讀 6556

package com.huawei.interview;

public class thread1 implements runnablecatch (exception e)

system.out.println("thread1 is going on");

system.out.println("thread1 is being over");};}

}

package com.huawei.interview;

public class thread2 implements runnablecatch (exception e)

system.out.println("thread2 is going on");

system.out.println("thread2 is being over");};}

}

package com.huawei.interview;

public class multithread catch (exception e)

new thread(new thread2()).start();}}

執行結果:

enter thread1!

thread1 is waiting

enter thread2

thread2 notify other thread can release wait status

thread2 is sleeping for ten ms

thread2 is going on

thread2 is being over

thread1 is going on

thread1 is being over

解釋:sleep就是正在執行的執行緒主動讓出cpu,cpu去執行其他執行緒,在sleep指定的時間過後,cpu

才會回到這個執行緒上繼續執行,如果當前執行緒進入了同步鎖,sleep方法並不會釋放鎖,即使

當前執行緒使用了sleep讓出了cpu,但其他被同步鎖擋住了的執行緒也無法得到執行。wait是指一

個已經進入了同步鎖的執行緒內,讓自己暫時讓出同步鎖,以便其他正在等待此鎖的執行緒可以得

到同步鎖並執行,只有其他執行緒呼叫了notify方法(notify方法並不會釋放鎖,只是告訴呼叫

過wait的執行緒可以參與獲得鎖的競爭了,但是不會馬上得到鎖,因為鎖還在其他執行緒手中,別

人還沒釋放)呼叫wait方法的執行緒就會解除wait狀態,程式可以再次獲得鎖後繼續向下執行

多執行緒wait 和sleep 的區別

wait 位於同步中,可以釋放鎖的資源 sleep 不是釋放鎖的資源 wait需要notify才能從休眠狀態變為執行狀態,sleep到期之後,會自動從休眠狀態變為執行狀態。官方話語如下 對於sleep 方法,我們首先要知道該方法是屬於thread類中的。而wait 方法,則是屬於object類中的。...

多執行緒學習 wait和sleep區別

1.wait可以指定時間也可以不指定,sleep必須指定時間。2.在同步是,對cpu的執行權和鎖的處理不同 知識點 執行權,有執行權,那麼意味了一直占用cpu在執行,其它執行緒分配不到cpu wait 釋放執行權,釋放鎖 很好理解,不指定時間,那麼他必須要等別人喚醒,如果不釋放鎖和執行權,那麼其他執...

JAVA多執行緒 sleep和wait的區別

1 這兩個方法來自不同的類分別是,sleep來自thread類,和wait來自object類。sleep是thread的靜態類方法,誰呼叫的誰去睡覺,即使在a執行緒裡呼叫了b的sleep方法,實際上還是a去睡覺,要讓b執行緒睡覺要在b的 中呼叫sleep。2 最主要是sleep方法沒有釋放鎖,而wa...