黄色网址大全免费-黄色网址你懂得-黄色网址你懂的-黄色网址有那些-免费超爽视频-免费大片黄国产在线观看

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節(jié)點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 學習攻略 Java學習 Java線程狀態(tài)轉換的情況介紹

Java線程狀態(tài)轉換的情況介紹

更新時間:2022-12-08 11:55:44 來源:動力節(jié)點 瀏覽1411次

Java線程狀態(tài)轉換有哪些情況?動力節(jié)點小編來告訴大家。

情況1NEW–>RUNNABLE

?當調用t.start()方法的時候,由NEW–>Runnable

情況2RUNNABLE<–>WATTING

? t線程用synchronize(obj)獲得對象鎖后:

? 調用obj.wait()方法時,t線程從RUNNABLE–>WAITING

? 調用obj.notify(),obj.notifyAll,t.interrupt時:

? 競爭鎖成功,t線程WAITING–>RUNNABLE

? 競爭鎖失敗,t線程從WAITING–>BLOCKED

@Slf4j(topic = "c.TestWaitNotify")
public class TestWaitNotify {
    final static Object obj = new Object();
    public static void main(String[] args) {
        new Thread(() -> {
            synchronized (obj) {
                log.debug("執(zhí)行....");
                try {
                    obj.wait(); // 讓線程在obj上一直等待下去
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                log.debug("其它代碼....");
            }
        },"t1").start();
        new Thread(() -> {
            synchronized (obj) {
                log.debug("執(zhí)行....");
                try {
                    obj.wait(); // 讓線程在obj上一直等待下去
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                log.debug("其它代碼....");
            }
        },"t2").start();
        // 主線程兩秒后執(zhí)行
        sleep(0.5);
        log.debug("喚醒 obj 上其它線程");
        synchronized (obj) {
//            obj.notify(); // 喚醒obj上一個線程
            obj.notifyAll(); // 喚醒obj上所有等待線程
        }
    }
}

情況3 RUNNABLE<–>WATTING

當前線程調用t.join()方法時,當前線程從RUNNABLE --> WAITING

注意是從當前線程在t線程對象的監(jiān)視器上等待

t線程運行結束,活調用了當前線程的interrupt()時,當前線程從WAITING–> RUNNNABLE

情況4 RUNNABLE<–>WATTING

當前線程調用LockSupport.park()方法會讓當前線程從RUNNABLE --> WAITING

調用LockSupport.unpark(目標線程)或調用了線程的interrupt(),會讓目標線程從WAITING -->RUNNABLE

情況5RUNNABLE<–>TIMED_WATTING

t線程用synchronize(obj)獲取了對象鎖后

調用obj.wait(long n)方法時,t線程從RUNABLE -->TIMED_WAITING

t線程等待時間超過了n毫秒,或調用obj.notify(),obj.notifyAll(),t.interrupt時

競爭鎖成功,t線程從TIMED_WAITING -->RUNNABLE

競爭鎖失敗,t線程從TIMED_WAITING --> BLOCKED

情況6 RUNNABLE<–>TIMED_WATTING

當前線程調用t.join(long n) 方法是,當前線程從RUNNABLE --> TIMED_WAITING

注意是當前線程在t線程****對象的監(jiān)視器上等待

當前線程等待時間超過了n毫秒,或t線程運行結束,調用了當前線程的interrupt()時,當前線程從TIMED_WAITING --> RUNNABLE

情況7 RUNNABLE<–>TIMED_WATTING

當前線程調用Thread.Sleep(long n) ,當前線程從RUNNABLE -->TIMED_WAITING

當前線程等待時間超過了n毫秒,當前線程從TIMED_WAITING -->RUNNABLE

情況8 RUNNABLE<–>TIMED_WATTING

當前線程調用LockSupport.parkNanos(long nanos) 或LockSupport.parkUntil(long millis)時,當前線程從RUNNABLE -->TIMED_WATTING

調用LockSupport.unpark(目標線程)或調用了線程的interrupt(),或是等待超時,會讓目標線程從TIMED_WATTING–> RUNNABLE

情況9 RUNNABLE<–>BOLCKED

t線程用synchronized(obj)獲取了對象鎖時如果競爭失敗,從RUNNABLE -->BLOCKED

持obj鎖線程的同步代碼塊執(zhí)行完畢,會喚醒該帝鄉(xiāng)上所有的BLOCKED的線程重新競爭,如果其中t線程競爭成功,從BLOCKED -->RUNNABLE,其他失敗的線程任然BLOCKED

情況10 RUNNABLE<–>TERMINATED

當前線程所有代碼運行完成,進入TERMINATED

–>RUNNABLE,其他失敗的線程任然BLOCKED

情況10 RUNNABLE<–>TERMINATED

當前線程所有代碼運行完成,進入TERMINATED

以上就是關于“Java線程狀態(tài)轉換的情況介紹”,大家如果想了解更多相關知識,不妨來關注一下本站的Java多線程編程技術文檔,里面還有更豐富的知識等著大家去學習,希望對大家能夠有所幫助。

提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 123日本不卡在线观看 | 热热色视频 | 2019偷偷狠狠的日日 | 久久亚洲国产欧洲精品一 | 在线观看免费午夜大片 | 免费看h成年漫画在线观看 免费看a级 | 宅男在线永久免费观看99 | 91在线亚洲综合在线 | 欧美在线一区二区三区不卡 | 日韩性大片免费 | 99亚洲精品视频 | 免费特黄视频 | 在线精品小视频 | 国产精品久久久久久亚洲伦理 | 九色综合久久综合欧美97 | 久久国产精品久久精 | 在线观看国产亚洲 | 国产乱子伦一区二区三区 | 黄漫画黄网站在线观看 | 日本资源站 | 国产精品二区三区免费播放心 | 欧美精品亚洲精品日韩专区 | 最近2019中文免费字幕 | tom影院亚洲国产一区二区 | 亚洲精品高清国产一久久 | 亚洲视频一区二区在线观看 | 正在播放亚洲一区 | a毛片免费全部在线播放毛 a毛片免费全部播放毛 | 一卡二卡在线观看 | 丝袜美女在线播放 | 激情综合亚洲欧美日韩 | 2022天天操| 天天综合网天天综合色不卡 | 免费的涩涩视频 | 国产日韩在线播放 | 中国国产高清一级毛片 | 欧美精品久久久亚洲 | a级特黄一级毛片七仙女思春 | 免费人成又黄又爽的视频强 | 欧美中文一区 | 五月天丁香婷婷开心激情五月 |