最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java線程生命周期圖文詳細講解

 更新時間:2023年01月27日 10:58:44   作者:健鑫.  
在java中,任何對象都要有生命周期,線程也不例外,它也有自己的生命周期。線程的整個生命周期可以分為5個階段,分別是新建狀態(tài)、就緒狀態(tài)、運行狀態(tài)、阻塞狀態(tài)和死亡狀態(tài)

線程的狀態(tài)

New

  • 表示線程已創(chuàng)建,沒啟動的狀態(tài)
  • 此時已經(jīng)做了一些準備工作,還沒有執(zhí)行run方法中代碼

Runnable

  • 調(diào)用start方法之后的狀態(tài),表示可運行狀態(tài)(不一定正在運行,因為調(diào)用start方法之后不一定立即運行)
  • 如果線程拿到CPU資源,但是突然資源被搶走,這個線程依然處于Runnable

Blocked

  • 線程進入到被synchronized修飾的代碼塊時,該鎖已經(jīng)被其他線程拿走,此時該線程處于Blocked
  • Blocked只針對synchronized

Waiting

  • 沒有設(shè)置時間參數(shù)的Object.wait方法可使線程狀態(tài)變?yōu)閣aiting

Timed Waiting

  • 相對Waiting,有了時間參數(shù)

Terminated

  • 執(zhí)行完畢
  • run方法正常執(zhí)行完畢
  • 或者出現(xiàn)了一個沒有被捕獲的異常終止了run方法

代碼演示

  • 展示線程的New、Runnable、Terminated狀態(tài)
  • 線程剛被new處于NEW狀態(tài)
  • 調(diào)用start方法處于RUNNABLE狀態(tài)
  • 程序正在執(zhí)行處于RUNNABLE狀態(tài)而不是RUNNING
  • 程序結(jié)束處于TERMINATED狀態(tài)
public class NewRunnableTerminated implements Runnable {
    public static void main(String[] args) {
        Thread thread = new Thread(new NewRunnableTerminated());
        // 打印線程狀態(tài)
        // New
        System.out.println(thread.getState());
        thread.start();
        // Runnable
        System.out.println(thread.getState());
//        try {
//            Thread.sleep(100);
//        } catch (InterruptedException e) {
//            e.printStackTrace();
//        }
        // Runnable
        System.out.println(thread.getState());
        try {
            Thread.sleep(100);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        // TERMINATED
        System.out.println(thread.getState());
    }
    @Override
    public void run() {
        for (int i = 0; i < 10000; i++) {
            System.out.println(i);
        }
    }
}
/*
* NEW
RUNNABLE
RUNNABLE
* TERMINATED
* */
  • 演示waiting、Blocked、Timed Waiting
  • 中間頻繁調(diào)用sleep方法是防止代碼執(zhí)行太快,達不到應(yīng)有的效果
  • 線程被調(diào)用sleep,處于TIMED_WAITING
  • 當一個線程執(zhí)行synchronized內(nèi)的代碼,另一個線程也要執(zhí)行則該線程處于BLOCKED
  • 線程執(zhí)行wait方法,處于WAITING
public class BlockWaitingTimedWaiting implements Runnable{
    public static void main(String[] args) {
        BlockWaitingTimedWaiting blockWaitingTimedWaiting = new BlockWaitingTimedWaiting();
        Thread thread1 = new Thread(blockWaitingTimedWaiting);
        thread1.start();
        Thread thread2 = new Thread(blockWaitingTimedWaiting);
        thread2.start();
        try {
            Thread.sleep(100);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println(thread1.getState());
        try {
            Thread.sleep(100);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println(thread2.getState());
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println(thread1.getState());
    }
    @Override
    public void run() {
        syn();
    }
    private synchronized void syn() {
        try {
            Thread.sleep(1000);
            wait();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}
/*
* TIMED_WAITING
BLOCKED
WAITING
* */

阻塞狀態(tài)

  • 一般而言,Blocked、Waiting、Timed_waiting都被稱之為阻塞狀態(tài)
  • 在阻塞狀態(tài)下,什么時候可以繼續(xù)執(zhí)行是不受控制的

到此這篇關(guān)于Java線程生命周期圖文詳細講解的文章就介紹到這了,更多相關(guān)Java線程生命周期內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 如何使用IDEA 搭建 SpringCloud 項目

    如何使用IDEA 搭建 SpringCloud 項目

    所謂微服務(wù),就是要把整個業(yè)務(wù)模塊拆分成多個各司其職的小模塊,做到單一職責原則,不會重復(fù)開發(fā)相同的業(yè)務(wù)代碼,實現(xiàn)真正意義上的高內(nèi)聚、低耦合,這篇文章主要介紹了如何使用IDEA 搭建 SpringCloud 項目,需要的朋友可以參考下
    2023-11-11
  • Java單鏈表的簡單操作實現(xiàn)教程

    Java單鏈表的簡單操作實現(xiàn)教程

    這篇文章主要給大家介紹了關(guān)于Java單鏈表的簡單操作實現(xiàn)教程,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-11-11
  • 淺談異常結(jié)構(gòu)圖、編譯期異常和運行期異常的區(qū)別

    淺談異常結(jié)構(gòu)圖、編譯期異常和運行期異常的區(qū)別

    下面小編就為大家?guī)硪黄獪\談異常結(jié)構(gòu)圖、編譯期異常和運行期異常的區(qū)別。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-09-09
  • Springboot整合RabbitMQ消息中間件的使用

    Springboot整合RabbitMQ消息中間件的使用

    在沒有特別要求的情況下,通常會選擇RabbitMQ作為消息中間件,本文主要介紹了Springboot整合RabbitMQ消息中間件的使用,具有一定的參考價值,感興趣的可以了解一下
    2023-11-11
  • 一定要讓你搞懂Java位運算符

    一定要讓你搞懂Java位運算符

    這篇文章主要為大家介紹了Java位運算符,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-01-01
  • spring?cloud?Gateway如何處理跨域問題

    spring?cloud?Gateway如何處理跨域問題

    這篇文章主要介紹了spring?cloud?Gateway如何處理跨域問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • Java基礎(chǔ)之Filter的實例詳解

    Java基礎(chǔ)之Filter的實例詳解

    這篇文章主要介紹了Java基礎(chǔ)之Filter的實例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-07-07
  • springboot3整合knife4j詳細圖文教程(swagger增強)

    springboot3整合knife4j詳細圖文教程(swagger增強)

    開發(fā)api提供對應(yīng)的接口規(guī)范進行聯(lián)調(diào)或并行開發(fā),api文檔管理必不可少,常用的Knife4j基于swagger(依賴已經(jīng)compile),可以進行管理,下面這篇文章主要給大家介紹了關(guān)于springboot3整合knife4j的相關(guān)資料,需要的朋友可以參考下
    2024-03-03
  • Java使用JavaMail發(fā)送郵件的方法

    Java使用JavaMail發(fā)送郵件的方法

    這篇文章主要介紹了Java使用JavaMail發(fā)送郵件的方法,結(jié)合實例形式分析了Java使用JavaMail實現(xiàn)郵件發(fā)送的具體步驟與相關(guān)實現(xiàn)代碼,需要的朋友可以參考下
    2016-04-04
  • Spring中@PathVariable和@RequestParam注解的用法區(qū)別

    Spring中@PathVariable和@RequestParam注解的用法區(qū)別

    這篇文章主要介紹了Spring中@PathVariable和@RequestParam注解的用法區(qū)別,@PathVariable 是 Spring 框架中的一個注解,用于將 URL 中的變量綁定到方法的參數(shù)上,它通常用于處理 RESTful 風格的請求,從 URL 中提取參數(shù)值,并將其傳遞給方法進行處理,需要的朋友可以參考下
    2024-01-01

最新評論

南宫市| 顺平县| 临沭县| 保亭| 广水市| 康平县| 铜梁县| 海林市| 汨罗市| 两当县| 宁河县| 金门县| 崇仁县| 崇阳县| 四川省| 锡林浩特市| 连城县| 鹤山市| 临沧市| 当雄县| 晋宁县| 金沙县| 筠连县| 潜江市| 温泉县| 曲水县| 公主岭市| 五大连池市| 凤山县| 任丘市| 运城市| 西城区| 区。| 高州市| 黔西| 新竹市| 双牌县| 新化县| 咸阳市| 广水市| 临沧市|