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();
保證當前線程是停止執行的,直到該線程所加入的線程完成為止。然而,如果它加入的線程沒有存活,則當前線程不需要停止。
添加回答
舉報