Java線程狀態(tài)變換過程代碼解析
線程狀態(tài)
NEW:剛創(chuàng)建未啟動的線程 RUNNABLE:正在執(zhí)行狀態(tài) BLOCKED:處于阻塞狀態(tài)的線程 WAITING:正在等待另一個線程執(zhí)行特定動作的線程 TIMED_WAITING:等待另一個線程執(zhí)行時間到達指定時間 TERMINATED:線程退出執(zhí)行public class TestState { public static void main(String[] args) { Thread thread = new Thread(()->{ for (int i = 0; i < 5; i++) {try { Thread.sleep(1000);} catch (InterruptedException e) { e.printStackTrace();} } System.out.println('/////'); }); //觀察線程狀態(tài) Thread.State state = thread.getState(); System.out.println(state); //New狀態(tài) thread.start(); state = thread.getState(); System.out.println(state);//Run狀態(tài) while (state!=Thread.State.TERMINATED){ try {Thread.sleep(100); } catch (InterruptedException e) {e.printStackTrace(); } state = thread.getState();//更新線程狀態(tài) System.out.println(state);//輸出狀態(tài) } }}
線程禮讓
當前正在執(zhí)行的線程暫停,但是不會阻塞 當前線程失去處理機,編程就緒狀態(tài) 禮讓是否成功取決于CPU,如果禮讓成功,則等待下一次調(diào)度public class TestYield { public static void main(String[] args) { MyYield myYield = new MyYield(); new Thread(myYield,'a').start(); new Thread(myYield,'b').start(); }}class MyYield implements Runnable{ @Override public void run() { System.out.println(Thread.currentThread().getName()+'線程開始執(zhí)行'); Thread.yield(); System.out.println(Thread.currentThread().getName()+'線程停止執(zhí)行'); }}
執(zhí)行結果:
線程強制執(zhí)行到結束
使用join()方法 使用join()方法的線程會強制執(zhí)行直到結束,不會讓出處理機public class TestJoin implements Runnable{ @Override public void run() { for (int i = 0; i < 1000; i++) { System.out.println('強制執(zhí)行線程來了'+i); } } public static void main(String[] args) throws Exception{ TestJoin testJoin = new TestJoin(); Thread thread = new Thread(testJoin); thread.start(); for (int i = 0; i < 500; i++) { if(i==200){thread.join(); } System.out.println('主線程'+i); } }}
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網(wǎng)。
相關文章:
1. Java類加載機制實現(xiàn)步驟解析2. JAMon(Java Application Monitor)備忘記3. IntelliJ IDEA設置背景圖片的方法步驟4. Python OpenCV去除字母后面的雜線操作5. Spring security 自定義過濾器實現(xiàn)Json參數(shù)傳遞并兼容表單參數(shù)(實例代碼)6. docker /var/lib/docker/aufs/mnt 目錄清理方法7. Python os庫常用操作代碼匯總8. Python TestSuite生成測試報告過程解析9. IntelliJ IDEA設置默認瀏覽器的方法10. 增大python字體的方法步驟
