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

Java線程生命周期圖文詳細(xì)講解

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

線程的狀態(tài)

New

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

Runnable

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

Blocked

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

Waiting

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

Timed Waiting

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

Terminated

  • 執(zhí)行完畢
  • run方法正常執(zhí)行完畢
  • 或者出現(xiàn)了一個(gè)沒有被捕獲的異常終止了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í)行太快,達(dá)不到應(yīng)有的效果
  • 線程被調(diào)用sleep,處于TIMED_WAITING
  • 當(dāng)一個(gè)線程執(zhí)行synchronized內(nèi)的代碼,另一個(gè)線程也要執(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)下,什么時(shí)候可以繼續(xù)執(zhí)行是不受控制的

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

相關(guān)文章

  • 如何使用IDEA 搭建 SpringCloud 項(xiàng)目

    如何使用IDEA 搭建 SpringCloud 項(xiàng)目

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

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

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

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

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

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

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

    一定要讓你搞懂Java位運(yùn)算符

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

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

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

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

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

    springboot3整合knife4j詳細(xì)圖文教程(swagger增強(qiáng))

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

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

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

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

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

最新評論

钟祥市| 区。| 新昌县| 颍上县| 栖霞市| 晋州市| 蒙自县| 马龙县| 巴东县| 迁西县| 岳西县| 噶尔县| 交口县| 厦门市| 涟源市| 黑山县| 娱乐| 株洲县| 泰宁县| 长垣县| 中江县| 裕民县| 安徽省| 肃北| 忻州市| 茌平县| 卫辉市| 红桥区| 双桥区| 瓮安县| 龙南县| 鄯善县| 内江市| 双城市| 木兰县| 迭部县| 雅江县| 丹东市| 广河县| 潼南县| 视频|