首頁 > 科技

阿里技術大佬,用例項講解,多執行緒中sleep、join、yield的區別

2021-06-08 08:32:01

今天給大家分享多執行緒中sleep、join、yield的區別,因為之前有很多粉絲私信我,問我這個問題,所以今天特意給大家整理了一下,如果還不會可以私信我找我要學習資料。

1、sleep()方法

其實主要的就是他是讓其他執行緒走,自己進行休眠,但是自己卻不會釋放物件鎖,也就是說,如果有同步鎖的時候,其他執行緒不能訪問共享資料。

注意該方法要捕獲異常 比如有兩個執行緒同時執行(沒有Synchronized),一個執行緒優先順序為MAX_PRIORITY,另一 個為MIN_PRIORITY,如果沒有Sleep()方法,只有高優先順序的執行緒執行完成後,低優先順序 的執行緒才能執行;但當高優先順序的執行緒sleep(5000)後,低優先順序就有機會執行了。 總之,sleep()可以使低優先順序的執行緒得到執行的機會,當然也可以讓同優先順序、高優先順序的 執行緒有執行的機會。

2、yield() 方法

yield() 這個方法從以上註釋可以看出,也是一個休眠自身執行緒的方法,同樣不會釋放自身鎖的標識,區別在於它是沒有參數的,即yield()方 法只是使當前執行緒重新回到可執行狀態,

所以執行yield()的執行緒有可能在進入到可執行狀態 後馬上又被執行,另外yield()方法只能使同優先順序或者高優先順序的執行緒得到執行機會,這也 和sleep()方法不同。

3、join() 方法

這個方法比較有意思,Thread的非靜態方法join()讓一個執行緒B「加入」到另外一個執行緒A的尾部。在A執行完畢之前, B不能工作。

保證當前執行緒停止執行,直到該執行緒所加入的執行緒完成為止。然而,如果它加入的執行緒沒有存活,則當前執行緒不需要停止。


IT145.com E-mail:sddin#qq.com