1 回答

TA貢獻1條經(jīng)驗 獲得超1個贊
1sleep()方法
? ? 在指定的毫秒數(shù)內(nèi)讓當(dāng)前正在執(zhí)行的線程休眠(暫停執(zhí)行)。此操作受到系統(tǒng)計時器和調(diào)度程序精準(zhǔn)和準(zhǔn)確性的影響,讓其他線程有機會繼續(xù)執(zhí)行,但是它不釋放對象鎖。也就是如果有synchronized同步塊,其他線程仍然不能訪問共享數(shù)據(jù),注意該方法需要捕獲異常。
? ? 比如有兩個線程同時執(zhí)行(沒有synchronized),一個線程優(yōu)先級為Max_PRIORITY,另一個為MIN_PRIORITY,如果沒有sleep()方法,只有高的優(yōu)先級的線程執(zhí)行完成后,低優(yōu)先級的線程才能執(zhí)行;但當(dāng)高優(yōu)先級的線程sleep(5000)后,低優(yōu)先級的就有機會執(zhí)行了。
總之,sleep()可以使用低優(yōu)先級的線程得到執(zhí)行的機會,當(dāng)然也可以讓同優(yōu)先級的線程有執(zhí)行的機會。
2 yield()方法
? ? yield()方法和sleep()方法類似,也不會釋放“鎖標(biāo)志”,區(qū)別在于,它沒有參數(shù),即yield()方法只是使當(dāng)前線程重新回到可執(zhí)行狀態(tài),所以執(zhí)行yield()的線程有可能在進入到可執(zhí)行狀態(tài)后,馬上又被執(zhí)行,另外yield()方法只能使用同優(yōu)先級或者高優(yōu)先級的線程得到執(zhí)行機會,這也和sleep()方法不同
3 join()方法
? ? Thread的非靜態(tài)方法join()讓一個線程B“加入”到另一個線程A的尾部,在A執(zhí)行完畢之前,B不能工作。
? Thread? t = new MyThread(); t.start(); t.jion();
保證當(dāng)前線程是停止執(zhí)行的,直到該線程所加入的線程完成為止。然而,如果它加入的線程沒有存活,則當(dāng)前線程不需要停止。
添加回答
舉報