欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

線程的狀態(tài)

New

  • 表示線程已創(chuàng)建,沒(méi)啟動(dòng)的狀態(tài)
  • 此時(shí)已經(jīng)做了一些準(zhǔn)備工作,還沒(méi)有執(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只針對(duì)synchronized

Waiting

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

Timed Waiting

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

Terminated

  • 執(zhí)行完畢
  • run方法正常執(zhí)行完畢
  • 或者出現(xiàn)了一個(gè)沒(méi)有被捕獲的異常終止了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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Spring Cloud Ribbon客戶端詳細(xì)介紹

    Spring Cloud Ribbon客戶端詳細(xì)介紹

    Spring Cloud Ribbon 是一套基于 Netflix Ribbon 實(shí)現(xiàn)的客戶端負(fù)載均衡和服務(wù)調(diào)用工具。通過(guò)Spring Cloud的封裝,可以讓我們輕松地將面向服務(wù)的REST模版請(qǐng)求自動(dòng)轉(zhuǎn)換成客戶端負(fù)載均衡的服務(wù)調(diào)用
    2022-09-09
  • Java全面深入探究SpringBoot攔截器與文件上傳

    Java全面深入探究SpringBoot攔截器與文件上傳

    攔截器對(duì)使用SpringMvc、Struts的開(kāi)發(fā)人員來(lái)說(shuō)特別熟悉,因?yàn)槟阒灰肴プ龊靡粋€(gè)項(xiàng)目必然會(huì)用到它,文件上傳是一個(gè)很常見(jiàn)的功能。在項(xiàng)目開(kāi)發(fā)過(guò)程中,我們通常都會(huì)使用一些成熟的上傳組件來(lái)實(shí)現(xiàn)對(duì)應(yīng)的功能
    2022-05-05
  • Spring boot將配置屬性注入到bean類中

    Spring boot將配置屬性注入到bean類中

    本篇文章主要介紹了Spring boot將配置屬性注入到bean類中,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-03-03
  • mvc架構(gòu)實(shí)現(xiàn)商品的購(gòu)買(二)

    mvc架構(gòu)實(shí)現(xiàn)商品的購(gòu)買(二)

    這篇文章主要為大家詳細(xì)介紹了mvc架構(gòu)實(shí)現(xiàn)商品購(gòu)買功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • 關(guān)于Spring自定義XML schema 擴(kuò)展的問(wèn)題(Spring面試高頻題)

    關(guān)于Spring自定義XML schema 擴(kuò)展的問(wèn)題(Spring面試高頻題)

    今天給大家分享一道spring高頻率面試題關(guān)于Spring自定義XML schema 擴(kuò)展的問(wèn)題,今天以spring整合dubbo的實(shí)例給大家詳細(xì)講解下,感興趣的朋友跟隨小編一起看看吧
    2021-05-05
  • Java TimedCache 帶時(shí)間緩存工具類詳解使用

    Java TimedCache 帶時(shí)間緩存工具類詳解使用

    工具類是包含集合框架、遺留的 collection 類、事件模型、日期和時(shí)間設(shè)施、國(guó)際化和各種實(shí)用工具類(字符串標(biāo)記生成器、隨機(jī)數(shù)生成器和位數(shù)組、日期Date類、堆棧Stack類、向量Vector類等)。集合類、時(shí)間處理模式、日期工具等各類常用工具包,本文將介紹帶時(shí)間緩存工具類
    2021-10-10
  • Maven安裝與配置圖文教程

    Maven安裝與配置圖文教程

    這篇文章主要為大家詳細(xì)介紹了Maven安裝與配置圖文教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-10-10
  • Java虛擬機(jī)內(nèi)存區(qū)域劃分詳解

    Java虛擬機(jī)內(nèi)存區(qū)域劃分詳解

    這篇文章主要介紹了Java虛擬機(jī)內(nèi)存區(qū)域劃分,本文邏輯清晰,可以幫助我們更好的掌握虛擬機(jī),對(duì)我們學(xué)習(xí)java來(lái)說(shuō)是一種幫助,需要的朋友可以參考下
    2021-04-04
  • Java編程生產(chǎn)者消費(fèi)者實(shí)現(xiàn)的四種方法

    Java編程生產(chǎn)者消費(fèi)者實(shí)現(xiàn)的四種方法

    Java生產(chǎn)者和消費(fèi)者問(wèn)題是線程安全模型中的經(jīng)典問(wèn)題:生產(chǎn)者和消費(fèi)者在同一個(gè)時(shí)間段共用同一個(gè)存儲(chǔ)空間,生產(chǎn)者向存儲(chǔ)空間中添加產(chǎn)品呢,消費(fèi)者取走產(chǎn)品,當(dāng)存儲(chǔ)空間為空時(shí),消費(fèi)者阻塞,當(dāng)存儲(chǔ)空間滿時(shí),生產(chǎn)者阻塞
    2021-10-10
  • Java詳細(xì)分析講解自動(dòng)裝箱自動(dòng)拆箱與Integer緩存的使用

    Java詳細(xì)分析講解自動(dòng)裝箱自動(dòng)拆箱與Integer緩存的使用

    裝箱就是把基本類型轉(zhuǎn)換成包裝類,拆箱就是把包裝類轉(zhuǎn)換成基本類型,下面這篇文章主要給大家介紹Java中自動(dòng)裝箱、自動(dòng)拆箱與Integer緩存,需要的朋友可以參考下
    2022-04-04

最新評(píng)論