亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

sleep() 、join()、yield()有什么區別

sleep() 、join()、yield()有什么區別

喵喔喔 2018-05-11 15:31:39
查看完整描述

1 回答

?
花非玉

TA貢獻1條經驗 獲得超1個贊

1sleep()方法

? ? 在指定的毫秒數內讓當前正在執行的線程休眠(暫停執行)。此操作受到系統計時器和調度程序精準和準確性的影響,讓其他線程有機會繼續執行,但是它不釋放對象鎖。也就是如果有synchronized同步塊,其他線程仍然不能訪問共享數據,注意該方法需要捕獲異常。

? ? 比如有兩個線程同時執行(沒有synchronized),一個線程優先級為Max_PRIORITY,另一個為MIN_PRIORITY,如果沒有sleep()方法,只有高的優先級的線程執行完成后,低優先級的線程才能執行;但當高優先級的線程sleep(5000)后,低優先級的就有機會執行了。

總之,sleep()可以使用低優先級的線程得到執行的機會,當然也可以讓同優先級的線程有執行的機會。

2 yield()方法

? ? yield()方法和sleep()方法類似,也不會釋放“鎖標志”,區別在于,它沒有參數,即yield()方法只是使當前線程重新回到可執行狀態,所以執行yield()的線程有可能在進入到可執行狀態后,馬上又被執行,另外yield()方法只能使用同優先級或者高優先級的線程得到執行機會,這也和sleep()方法不同

3 join()方法

? ? Thread的非靜態方法join()讓一個線程B“加入”到另一個線程A的尾部,在A執行完畢之前,B不能工作。

? Thread? t = new MyThread(); t.start(); t.jion();

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


查看完整回答
1 反對 回復 2019-06-25
  • 1 回答
  • 0 關注
  • 1106 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號