Java線程讓步y(tǒng)ield用法實例分析
本文實例講述了Java線程讓步y(tǒng)ield用法。分享給大家供大家參考,具體如下:
一 點睛
yield()方法是一個和sleep()方法有點類似的方法,它是Thread類提供的一個靜態(tài)方法,它也可以讓當(dāng)前正在執(zhí)行的線程暫停,但它不會阻塞該線程,它只是讓線程轉(zhuǎn)入就緒狀態(tài)。yield只是讓當(dāng)前線程暫停一下,讓系統(tǒng)的線程調(diào)度器重新調(diào)度一次,完全可能的情況是:當(dāng)某個線程調(diào)用了yield()方法后,線程調(diào)度器又將其調(diào)度出來重新執(zhí)行。
當(dāng)某個線程調(diào)用了yield方法暫停之后,只有優(yōu)先級與當(dāng)前線程相同,或者優(yōu)先級比當(dāng)前線程更高的處于就緒狀態(tài)的線程才會獲得執(zhí)行的機會。
二 代碼
public class YieldTest extends Thread { public YieldTest(String name) { super(name); } // 定義run方法作為線程執(zhí)行體 public void run() { for (int i = 0; i < 50 ; i++ ) { System.out.println(getName() + " " + i); // 當(dāng)i等于20時,使用yield方法讓當(dāng)前線程讓步 if (i == 20) { Thread.yield(); } } } public static void main(String[] args)throws Exception { // 啟動兩條并發(fā)線程 YieldTest yt1 = new YieldTest("高級"); // 將ty1線程設(shè)置成最高優(yōu)先級 //yt1.setPriority(Thread.MAX_PRIORITY); yt1.start(); YieldTest yt2 = new YieldTest("低級"); // 將yt2線程設(shè)置成最低優(yōu)先級 //yt2.setPriority(Thread.MIN_PRIORITY); yt2.start(); } }
三 運行
......
低級 18
低級 19
高級 15
低級 20
高級 16
高級 17
高級 18
高級 19
低級 21
高級 20
低級 22
低級 23
低級 24
低級 25
低級 26
...
四 說明
1 此時高級和低級兩個線程優(yōu)先級一樣。
2 線程調(diào)用yield之后將執(zhí)行機會讓給優(yōu)先級相同的其他線程。
五 代碼2
public class YieldTest extends Thread { public YieldTest(String name) { super(name); } // 定義run方法作為線程執(zhí)行體 public void run() { for (int i = 0; i < 50 ; i++ ) { System.out.println(getName() + " " + i); // 當(dāng)i等于20時,使用yield方法讓當(dāng)前線程讓步 if (i == 20) { Thread.yield(); } } } public static void main(String[] args)throws Exception { // 啟動兩條并發(fā)線程 YieldTest yt1 = new YieldTest("高級"); // 將ty1線程設(shè)置成最高優(yōu)先級 yt1.setPriority(Thread.MAX_PRIORITY); yt1.start(); YieldTest yt2 = new YieldTest("低級"); // 將yt2線程設(shè)置成最低優(yōu)先級 yt2.setPriority(Thread.MIN_PRIORITY); yt2.start(); } }
六 運行2
高級 17
高級 18
高級 19
高級 20
高級 21
高級 22
高級 23
高級 24
高級 25
高級 26
高級 27
高級 28
......
高級 48
高級 49
低級 12
低級 13
低級 14
低級 15
低級 16
低級 17
低級 18
低級 19
低級 20
低級 21
低級 22
低級 23
七 說明2
1 兩個線程的優(yōu)先級不同。
2 高優(yōu)先級的線程調(diào)用yield方法暫停之后,系統(tǒng)沒有與之優(yōu)先級相同,或更高優(yōu)先級的線程,所以該線程繼續(xù)執(zhí)行。
更多java相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Java進(jìn)程與線程操作技巧總結(jié)》、《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java操作DOM節(jié)點技巧總結(jié)》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總》
希望本文所述對大家java程序設(shè)計有所幫助。
相關(guān)文章
Springboot整合nacos報錯無法連接nacos的解決
這篇文章主要介紹了Springboot整合nacos報錯無法連接nacos的解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-06-06springboot2整合redis使用lettuce連接池的方法(解決lettuce連接池?zé)o效問題)
這篇文章主要介紹了springboot2整合redis使用lettuce連接池(解決lettuce連接池?zé)o效問題),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-12-12Spring中的BeanFactory與FactoryBean區(qū)別詳解
這篇文章主要介紹了Spring中的BeanFactory與FactoryBean區(qū)別詳解,BeanFactory是一個接口,它是spring中的一個工廠,FactoryBean也是一個接口,實現(xiàn)了3個方法,通過重寫其中方法自定義生成bean,需要的朋友可以參考下2024-01-01SpringBoot使用Redis單機版過期鍵監(jiān)聽事件的實現(xiàn)示例
在緩存的使用場景中經(jīng)常需要使用到過期事件,本文主要介紹了SpringBoot使用Redis單機版過期鍵監(jiān)聽事件的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-07-07Spring中propagation的7種事務(wù)配置及說明
這篇文章主要介紹了Spring中propagation的7種事務(wù)配置及說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-06-06springboot使用maven實現(xiàn)多環(huán)境運行和打包問題
這篇文章主要介紹了springboot使用maven實現(xiàn)多環(huán)境運行和打包問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-07-07