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

深入探究Java線程的狀態(tài)與生命周期

 更新時間:2022年04月26日 09:36:55   作者:淡沫初夏Zz  
在java中,任何對象都要有生命周期,線程也不例外,它也有自己的生命周期。線程的整個生命周期可以分為5個階段,分別是新建狀態(tài)、就緒狀態(tài)、運行狀態(tài)、阻塞狀態(tài)和死亡狀態(tài)

一、線程的狀態(tài)

NEW: 安排了工作, 還未開始行動
RUNNABLE: 可工作的. 又可以分成正在工作中和即將開始工作.
BLOCKED: 這幾個都表示排隊等著其他事情
WAITING: 這幾個都表示排隊等著其他事情
TIMED_WAITING: 這幾個都表示排隊等著其他事情
TERMINATED: 工作完成了

新建(初始)

當繼承Thread類和實現了Runnable接口,就可以創(chuàng)建線程,新建一個對象就是初始狀態(tài)

就緒(可運行)

  • 調用線程的start()方法,此線程進入可運行狀態(tài)。
  • 當前線程sleep()方法結束,其他線程join()結束,等待用戶輸入完畢,某個線程拿到對象鎖,這些線程也將進入可運行狀態(tài)。
  • 當前線程時間片用完了,調用當前線程的yield()方法,當前線程進入可運行狀態(tài)。
  • 鎖池里的線程拿到對象鎖后,進入可運行狀態(tài)。

運行

可運行狀態(tài)(runnable)的線程獲得了cpu 時間片(timeslice) ,執(zhí)行程序代碼,就到了運行狀態(tài)

阻塞

阻塞狀態(tài)是指線程因為某種原因放棄了cpu 使用權,也即讓出了cpu 時間片,暫時停止運行。直到線程進入可運行(runnable)狀態(tài),才有機會再次獲得cpu 時間片轉到運行(running)狀態(tài)

  • 當前線程T調用Thread.sleep()方法,當前線程進入阻塞狀態(tài)。
  • 運行在當前線程里的其它線程t2調用join()方法,當前線程進入阻塞狀態(tài)。
  • 等待用戶輸入的時候,當前線程進入阻塞狀態(tài)

死亡

  • 當線程的run()方法完成時,或者主線程的main()方法完成時,我們就認為它死去。這個線程對象也許是活的,但是,它已經不是一個單獨執(zhí)行的線程。線程一旦死亡,就不能復生。
  • 在一個死去的線程上調用start()方法,會拋出java.lang.IllegalThreadStateException異常

二、線程的狀態(tài)轉移

NEW , RUNNABLE ,TERMINATED 狀態(tài)的轉移

使用 isAlive 方法判定線程的存活狀態(tài)

public class ThreadStateTransfer {
    public static void main(String[] args) throws InterruptedException {
        Thread t = new Thread(() -> {
            for (int i = 0; i < 1000_0000; i++) {
            }
        }, "李四");
        System.out.println(t.getName() + ": " + t.getState());;
        t.start();
        while (t.isAlive()) {
            System.out.println(t.getName() + ": " + t.getState());;
        }
        System.out.println(t.getName() + ": " + t.getState());;
    }
}

yield() 方法,讓出 CPU執(zhí)行權

/**
 * yield讓出CPU執(zhí)行權
 */
public class ThreadYield {
    public static void main(String[] args) {
        Thread thread  = new Thread(() ->{
            Thread t1 = Thread.currentThread();
            for (int i = 0; i < 10; i++) {
                //讓出CPU執(zhí)行權
                Thread.yield();
                System.out.println("執(zhí)行了線程" + t1.getName());
            }
        },"張三");
        thread.start();
        //創(chuàng)建并啟動線程
        new Thread(() -> {
            Thread t1 = Thread.currentThread();
            for (int i = 0; i < 10; i++) {
                System.out.println("執(zhí)行了線程" + t1.getName());
            }
        },"李四").start();
    }

結論

yield 不改變線程的狀態(tài), 但是會重新去排隊

三、線程的生命周期

  • 新建:創(chuàng)建線程對象
  • 就緒:線程有執(zhí)行資格,沒有執(zhí)行權
  • 運行:有執(zhí)行資格,有執(zhí)行權
  • 阻塞:由于一些操作讓線程改變了狀態(tài),沒有執(zhí)行資格,沒有執(zhí)行權,另一些操作可以把它給激活,激活處于就緒狀態(tài)
  • 死亡:線程對象變成垃圾,等待被回收

到此這篇關于深入探究Java線程的狀態(tài)與生命周期的文章就介紹到這了,更多相關Java線程狀態(tài)內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 關于@Component注解的含義說明

    關于@Component注解的含義說明

    這篇文章主要介紹了關于@Component注解的含義說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • Spring前后端跨域請求設置代碼實例

    Spring前后端跨域請求設置代碼實例

    這篇文章主要介紹了Spring前后端跨域請求設置代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-07-07
  • Java線程之ThreadLocal解析

    Java線程之ThreadLocal解析

    這篇文章主要介紹了Java線程之ThreadLocal解析,ThreadLocal 提供線程的局部變量,每個線程都可以通過get()和set()對局部變量進行操作而不會對其他線程的局部變量產生影響,實現了線程之間的數據隔離,需要的朋友可以參考下
    2023-09-09
  • 分布式服務Dubbo+Zookeeper安全認證實例

    分布式服務Dubbo+Zookeeper安全認證實例

    下面小編就為大家分享一篇分布式服務Dubbo+Zookeeper安全認證實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2017-12-12
  • 淺談shiro的SecurityManager類結構

    淺談shiro的SecurityManager類結構

    下面小編就為大家?guī)硪黄獪\談shiro的SecurityManager類結構。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-07-07
  • Maven中pom.xml配置文件詳細介紹

    Maven中pom.xml配置文件詳細介紹

    這篇文章主要介紹了Maven中pom.xml配置文件詳細介紹,具有一定參考價值,需要的朋友可以了解下。
    2017-11-11
  • 關于JSONObject.toJSONString出現地址引用問題

    關于JSONObject.toJSONString出現地址引用問題

    這篇文章主要介紹了關于JSONObject.toJSONString出現地址引用問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • 源碼分析SpringMvc日志打印被忽略輸出問題

    源碼分析SpringMvc日志打印被忽略輸出問題

    這篇文章主要為大家介紹了源碼分析SpringMvc日志打印被忽略輸出問題,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-08-08
  • 帶你了解Java Maven的打包操作

    帶你了解Java Maven的打包操作

    這篇文章主要介紹了Maven打包的相關知識,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-09-09
  • Struts2實現對action請求對象的攔截操作方法

    Struts2實現對action請求對象的攔截操作方法

    這篇文章主要介紹了Struts2實現對action請求對象的攔截操作方法,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2017-11-11

最新評論