區(qū)別
1、sleep()會(huì)導(dǎo)致當(dāng)前線程暫停指定的時(shí)間,沒(méi)有CPU時(shí)間片的消耗
2、yield()只是對(duì)CPU調(diào)度器的一個(gè)提示,如果CPU調(diào)度器沒(méi)有忽略這個(gè)提示,會(huì)導(dǎo)致線程上下文的切換
sleep()會(huì)使線程短暫阻塞,在給定時(shí)間內(nèi)釋放CPU資源
如果yield()生效,yield()會(huì)使得從RUNNING狀態(tài)進(jìn)入RUNNABLE狀態(tài)
sleep()會(huì)幾乎百分百地完成給定時(shí)間的休眠,但是yield()的提示不一定能擔(dān)保
一個(gè)線程調(diào)用sleep()而另一個(gè)線程調(diào)用interrupt()會(huì)捕獲到中斷信號(hào),而yield則不會(huì)
實(shí)例
package cn.hanquan.test;
/*
* sleep模擬倒計(jì)時(shí),每一秒減一
*/
public class Lambda {
public static void main(String[] args) {
// Labmda表達(dá)式
new Thread(() -> {
for (int i = 0; i < 100; i++) {
System.out.println(i);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
}
}
以上就是java yield()和sleep()的區(qū)別,希望對(duì)大家有所幫助。更多關(guān)于“java培訓(xùn)”的問(wèn)題,歡迎咨詢千鋒教育在線名師。千鋒教育多年辦學(xué),課程大綱緊跟企業(yè)需求,更科學(xué)更嚴(yán)謹(jǐn),每年培養(yǎng)泛IT人才近2萬(wàn)人。不論你是零基礎(chǔ)還是想提升,都可以找到適合的班型,千鋒教育隨時(shí)歡迎你來(lái)試聽(tīng)。