【JavaEE】多線程 -- 線程狀態

目錄

  • 六大狀態
    • 舉例說明

六大狀態

  • New 新建狀態:線程還沒出創建,只有Thread 實例化的對象,調用start 方法之前的狀態。
  • Runnable 運行狀態:被系統調度后,CPU 正在執行的,Ready 就緒態,系統調度,隨時準備被CPU 執行。
  • Blocked 阻塞狀態:線程遇到某種機制之后不參與 CPU的調度執行,等待某個條件的觸發喚醒線程
  • waiting 等待狀態: 無限期等待(死等)
  • Time_Waiting 超時等待狀態:設置了最大等待時間,超出最大等待時間就換醒線程
  • Terminated 終止狀態:線程生命周期結束后的狀態

在這里插入圖片描述

舉例說明

  • 接下來我說一個例子來說一下這幾個關于線程的狀態

阿杰和千均(兩個線程)都喜歡上了小美, 兩個人心里面都打算怎么追到小美(new 新建狀態), 之后他們時刻關注著小美的動態,等著合適的機會接近(線程 READY 就緒狀態, 準備如何追到小美)。
小美周末一個人去圖書館,阿杰覺得機會來了,主動上前打招呼并提出一起學習(線程的運行狀態, 達成與小美做事, 處于追到小美的運行)。聊天過程中,阿杰想約小美晚上看電影,可小美說要先回宿舍問室友有沒有空,一起的話更熱鬧,阿杰只好等著小美回復(導致當前追求步驟暫停(線程堵塞)的原因是:等待小美詢問室友的結果, 小美沒說具體時間是多久)。
因為阿杰暫時等不到小美答復,沒法繼續推進約會的事,所以陷入
阻塞等待
(等小美回消息)。這時候千均看到小美在圖書館外打電話,趕緊走過去遞上一杯熱奶茶(此時相當于 CPU 調度切換,千均從就緒狀態進入運行狀態)。千均和小美聊得不錯,想約她下周去看畫展,小美說下周要準備考試,得考完試才行,大概一周后有空,此時千均線程陷入了等待狀態,具有時效性,線程需要等一周就可以繼續執行了),一周后千均就可以再約小美去看畫展。
這邊千均等待的時候,小美給阿杰回了消息,說室友有空,晚上可以一起去看電影,阿杰收到消息后(忽略初始的心理準備),重新調整狀態,準備晚上的約會安排(阿杰獲得繼續追求的條件,從阻塞狀態中喚醒,來到就緒狀態準備進一步行動)。到了晚上,阿杰和小美以及她的室友一起看完電影,可小美說 “我和室友一起走就行,你先回去吧,明天再說”,此時阿杰知道要等明天才有機會,于是進入等待狀態(有明確的等待節點,知道第二天可以再嘗試)。?
第二天,阿杰聯系小美時,發現小美正在忙社團活動,沒回消息,阿杰只能等著她忙完(此時又進入阻塞狀態,因為不知道小美具體什么時候忙完,只能被動等待回復)。過了幾個小時,小美回復說活動結束了,阿杰趕緊抓住機會約她吃飯,小美同意了。吃飯時阿杰好好表現,之后兩人關系逐漸升溫,阿杰成功追到了小美,這個追求線程也就結束了(線程結束狀態)。
但是千均成了小丑, 還處于等待狀態, 等待一個星期之后呢, 但是一個星期之后阿杰牽著小美的手出現在千均面前, 千均看到小美過來等待成功, 這個時候看到阿杰和小美的動作已經知道沒機會了, 千均就進入了(線程結束狀態)

package thread;
import static java.lang.Thread.sleep;
public class ThreadDemo18 {public static void main(String[] args) throws InterruptedException {Thread t = new Thread(() -> {for(int i = 0; i < 5; i++) {System.out.println("線程執行中...");try {sleep(1000);}catch (InterruptedException e) {e.printStackTrace();}}});//線程啟動之前, 狀態就是 NEWSystem.out.println(t.getState());t.start();System.out.println(t.getState());sleep(500);System.out.println(t.getState());t.join();//線程運行完畢, 狀態就是 TERMINATEDSystem.out.println(t.getState());}
}

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/95659.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/95659.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/95659.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

網絡流初步

網絡流初步 文章目錄網絡流初步概念介紹最大流費用流概念介紹 網絡流不同之處在于它的本質圖論&#xff0c;但是把圖論的某些概念換了一個說法而已&#xff0c;初步只要了解網絡流的各個概念就可以明白的很快。 下述概念是本人自己定義的&#xff0c;對于網絡流的題目做的還不…

[系統架構設計師]系統架構基礎知識(一)

[系統架構設計師]系統架構基礎知識&#xff08;一&#xff09; 一.計算機系統基礎知識 1.計算機系統概述 硬件軟件及網絡組成的系統 2.計算機硬件基礎知識 馮 諾依曼結構&#xff1a;運算器&#xff0c;控制器&#xff0c;存儲器&#xff0c;輸入設備&#xff0c;輸出設備 專用…

深入解析Java代理模式:靈活控制對象訪問的核心技術

在日常開發中&#xff0c;我們常遇到這樣的場景&#xff1a;需要控制對象訪問權限、優化高成本操作&#xff0c;或給方法添加額外功能&#xff08;如日志、事務&#xff09;。代理模式&#xff08;Proxy Pattern&#xff09; 正是解決這類問題的金鑰匙。作為結構型設計模式的代…

【學習筆記】Java并發編程的藝術——第9章 Java中的線程池

第9章 Java中的線程池 線程池優勢&#xff1a; ①減少資源消耗 ②提高響應速度 ③統一管理 9.1 線程池的實現原理 當任務來后 ①判斷核心線程池是否已滿&#xff0c;若未滿&#xff0c;創建一個核心線程來執行任務 ②若無空閑核心線程且核心線程已滿&#xff0c;則將任務放入任…

Mybatis學習筆記(九)

常見問題與解決方案 簡要描述&#xff1a;總結MyBatis-Plus開發過程中常見的問題、錯誤及其解決方案&#xff0c;幫助開發者快速定位和解決問題。 核心概念&#xff1a; 常見錯誤&#xff1a;開發中經常遇到的錯誤類型性能問題&#xff1a;性能相關問題的排查和解決配置問題&am…

數據類型 list

一、介紹類似于數組&#xff0c;順序表&#xff0c;deque結構圖特點&#xff1a;元素有序&#xff0c;元素允許重復由于頭尾高效插入刪除&#xff0c;可以模擬棧&#xff0c;隊列二、常見 list 命令1、lpush key elem [elem ...]頭插元素&#xff0c;返回值列表長度2、lrange k…

pyqt5無法顯示opencv繪制文本和掩碼信息

背景&#xff1a;pyqt5無法顯示opencv繪制的標簽和mask&#xff1b;我們在使用YOLO做實例分割做推理時&#xff0c;會使用opencv做后處理結果繪制&#xff08;含標簽繪制和掩碼繪制&#xff09;&#xff1b;結果opencv繪制的解碼卻無法在pyqt的解碼上面顯示。pyqt轉換代碼如下&…

如何生成嚴格遞增的分布式id?

本文字數&#xff1a;2604字預計閱讀時間&#xff1a;15分鐘01引言在現有分布式系統中&#xff0c;面對增長迅速的業務數據&#xff0c;id生成一直是非常重要的一環。而分布式系統的id生成方案需要滿足幾個重要特性&#xff1a;容錯高可用、高性能高并發、全局唯一。02技術背景…

【LeetCode】二叉樹相關算法題

目錄1、二叉樹介紹【1】核心概念【2】關鍵特性2、算法題【1】二叉樹的前序遍歷【2】二叉樹的后序遍歷1、二叉樹介紹 【1】核心概念 結構含義節點結構二叉樹由節點組成&#xff0c; 每個節點包含一個數據元素和最多兩個子節點&#xff1a;左子節點和右子節點根節點樹的頂部節點…

Vulnhub Deathnote靶機復現攻略

一、靶機安裝 下載地址&#xff1a;https://download.vulnhub.com/deathnote/Deathnote.ova 下載好后使用VB打開&#xff0c;配置如下 二、主機發現 使用相同連接方式的kali進行后續操作(172.16.2.7)根據mac地址進行確認。 nmap -sn 172.16.2.1/24 三、端口掃描 端口開放了…

DevEco Studio 6.0.0 元服務頁面跳轉失敗

背景&#xff0c;我使用最新的編輯器DevEco Studio 6.0.0&#xff0c;編寫一個元服務&#xff0c;發現使用跳轉頁面的時候失敗了&#xff01;然后查看官方文檔&#xff0c;兩種方式都測試了&#xff0c;發現都不行。 方法1&#xff1a;Navigation路由跳轉無效&#xff0c;見官方…

docker重啟或系統重啟后harbor自動啟動

docker重啟或系統重啟后harbor自動啟動docker重啟或系統重啟后harbor自動啟動方法 1&#xff1a;在 docker-compose.yml 中配置重啟策略&#xff08;推薦&#xff09;方法 2&#xff1a;創建 Systemd 服務&#xff08;更可靠&#xff09;方法 3&#xff1a;使用 Docker 的 Rest…

OpenZeppelin Contracts 架構分層分析

OpenZeppelin Contracts 是一個面向以太坊&#xff08;及兼容 EVM 的區塊鏈&#xff09;生態系統的??模塊化、安全性優先、標準兼容的智能合約庫??。其內部代碼按照功能職責與抽象層級&#xff0c;可系統性地劃分為多個邏輯層次。理解這些層次及其依賴關系&#xff0c;對于…

Java-JVM的內存模型

一.JVM內存模型JVM內存模型可以從進程生命周期和線程生命周期1.線程生命周期每個線程都會有自己各自一份數據&#xff0c;不會存在線程安全問題1.程序計數器指示當前線程執行的字節碼指令的行號&#xff0c;以便線程執行時可以回到正確的位置2.虛擬機棧線程私有的&#xff0c;與…

Highcharts Dashboards | 打造企業級數據儀表板:從圖表到數據駕駛艙

企業日常決策、產品運營、業務監控&#xff0c;越來越依賴數據驅動。而儀表板&#xff08;Dashboard&#xff09;作為匯總展示多維度信息的“數據駕駛艙”&#xff0c;已成為企業可視化的核心場景之一。如果你正在尋找一款能夠快速、靈活、安全構建儀表板的前端圖表工具&#x…

基于Java的Markdown轉Word工具(標題、段落、表格、Echarts圖等)

項目源于我們開發的一款基于大模型的報告生成工具。由于需要將 Markdown 格式的內容導出為 Word 文檔&#xff0c;而市面上缺乏合適的現成工具&#xff0c;所以決定自己開發一個Markdown轉Word的工具。 &#x1fa77;源碼地址&#xff1a;daydayup-zyn/md2doc-plus &#x1f…

Unity:PlayerPrefs筆記

寫在前面&#xff1a;寫本系列(自用)的目的是回顧已經學過的知識、記錄新學習的知識或是記錄心得理解&#xff0c;方便自己以后快速復習&#xff0c;減少遺忘。一、PlayerPrefs的基本方法1、存儲相關PlayerPrefs的數據存儲類似于鍵值對存儲&#xff0c;一個鍵對應一個值。Unity…

SQL tutorials

SQL Literature SQL運行在資料庫管理系統&#xff08;Database Management System&#xff09;&#xff0c;如MySQL&#xff0c;Postgre SQL&#xff0c;Microsoft SQL Server&#xff0c; Oracle&#xff0c;etc。 SQL練習平臺&#xff1a;https://sqliteviz.com/ EXAMPLE SQL…

MySQL快速恢復數據的N種方案完全教程

目錄 1. 理解MySQL數據恢復的核心邏輯 1.1 數據丟失的常見場景 1.2 MySQL的“救命稻草”:關鍵文件和機制 2. 方案一:利用全量備份+binlog實現點對點恢復 2.1 準備工作 2.2 恢復步驟 2.3 實戰案例 3. 方案二:利用InnoDB的崩潰恢復機制 3.1 崩潰恢復的原理 3.2 恢復步…

雙屏加固筆記本電腦C156-2:堅固與高效的完美融合

在當今數字化時代&#xff0c;筆記本電腦已成為人們工作和生活中不可或缺的工具。然而&#xff0c;對于一些特殊行業和惡劣環境下的應用場景&#xff0c;普通筆記本電腦往往難以滿足需求。此時&#xff0c;具備堅固耐用、高性能等特點的加固筆記本電腦應運而生。魯成偉業的雙屏…