java中,線程的執行狀態有哪些

在 Java 里,線程有 6 種執行狀態,這些狀態都在?java.lang.Thread.State?枚舉類中被定義。下面為你詳細介紹這些狀態:

1. NEW(新建狀態)

當你創建了一個?Thread?對象,卻還未調用其?start()?方法時,線程就處于新建狀態。此時,線程僅僅是一個對象實例,操作系統還未為其分配資源和執行環境。

示例代碼:

java

Thread thread = new Thread(() -> {System.out.println("線程正在執行");
});
// 此時 thread 處于 NEW 狀態

2. RUNNABLE(可運行狀態)

調用?start()?方法之后,線程就進入了可運行狀態。這一狀態又包含兩種情況:

  • 就緒狀態:線程已經獲取了除 CPU 之外的所有必要資源,正在等待操作系統的調度以獲取 CPU 時間片。
  • 運行狀態:線程已經獲得 CPU 時間片,正在執行其?run()?方法中的代碼。

示例代碼:

java

Thread thread = new Thread(() -> {System.out.println("線程正在執行");
});
thread.start();
// 調用 start() 后,線程進入 RUNNABLE 狀態

3. BLOCKED(阻塞狀態)

當線程試圖獲取一個被其他線程占用的鎖時,會進入阻塞狀態。在獲取到鎖之前,線程會一直等待。

示例代碼:

java

class LockExample {private static final Object lock = new Object();public static void main(String[] args) {Thread thread1 = new Thread(() -> {synchronized (lock) {try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}}});Thread thread2 = new Thread(() -> {synchronized (lock) {System.out.println("線程 2 獲得鎖");}});thread1.start();thread2.start();// 線程 2 可能會進入 BLOCKED 狀態,等待線程 1 釋放鎖}
}

4. WAITING(等待狀態)

線程調用以下方法后會進入等待狀態:

  • Object.wait()
  • Thread.join()
  • LockSupport.park()

處于等待狀態的線程會一直等待,直到其他線程調用對應的喚醒方法,如?Object.notify()?或?Object.notifyAll()

示例代碼:

java

class WaitingExample {private static final Object lock = new Object();public static void main(String[] args) {Thread thread1 = new Thread(() -> {synchronized (lock) {try {lock.wait();} catch (InterruptedException e) {e.printStackTrace();}System.out.println("線程 1 被喚醒");}});Thread thread2 = new Thread(() -> {synchronized (lock) {lock.notify();System.out.println("線程 2 喚醒線程 1");}});thread1.start();try {Thread.sleep(100);} catch (InterruptedException e) {e.printStackTrace();}thread2.start();}
}

5. TIMED_WAITING(定時等待狀態)

線程調用以下帶有超時參數的方法后會進入定時等待狀態:

  • Thread.sleep(long millis)
  • Object.wait(long timeout)
  • Thread.join(long millis)
  • LockSupport.parkNanos(long nanos)
  • LockSupport.parkUntil(long deadline)

在指定的時間過去之后,線程會自動恢復到可運行狀態。

示例代碼:

java

Thread thread = new Thread(() -> {try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}System.out.println("線程等待結束");
});
thread.start();
// 線程進入 TIMED_WAITING 狀態,等待 1 秒

6. TERMINATED(終止狀態)

線程的?run()?方法執行完畢,或者因異常而提前結束時,線程就進入終止狀態。一旦線程進入終止狀態,就無法再重新啟動。

示例代碼:

java

Thread thread = new Thread(() -> {System.out.println("線程正在執行");
});
thread.start();
// 線程執行完畢后進入 TERMINATED 狀態

綜上所述,Java 線程的 6 種執行狀態反映了線程在其生命周期中的不同階段,了解這些狀態有助于你更好地控制和管理線程。

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

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

相關文章

MATLAB 控制系統設計與仿真 - 41

魯棒控制的其他函數 - 回路成型函數 loopsyn 靈敏度問題由魯棒控制工具箱中的loopsyn就可以直接求解,該函數采用H無窮回路成型算法設計控制器,函數的調用格式為: [K,CL,gamma,info] = loopsyn(G,Gd) % G為受控對象模型% Gd為期望的回路傳遞函數% K為回路成型控制器模型% C…

查詢Hologres或postgresql中的數據

因Hologres使用postgresql的語法.所以兩者查詢一樣. 方案1: import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.util.ArrayList; import java.util.List;/*** 一個使用簡單連接池管理PostgreSQL連接的工具類。*/ publi…

OpenBayes 一周速覽|EasyControl 高效控制 DiT 架構,助力吉卜力風圖像一鍵生成;TripoSG 單圖秒變高保真 3D 模型

公共資源速遞 10 個教程: * 一鍵部署 R1-OneVision * UNO:通用定制化圖像生成 * TripoSG:單圖秒變高保真 3D * 使用 VASP 進行機器學習力場訓練 * InfiniteYou 高保真圖像生成 Demo * VenusFactory 蛋白質工程設計平臺 * Qwen2.5-0mni…

中興云電腦W102D_晶晨S905X2_2+16G_mt7661無線_安卓9.0_線刷固件包

中興云電腦W102D_晶晨S905X2_216G_mt7661無線_安卓9.0_線刷固件包 準備工作: 工具和設備在開始刷機之前,確保你已經準備好以下物品:雙公頭USB線:選擇一根30-50厘米長的USB線,長度適中,方便操作,…

Rust 學習筆記:安裝 Rust

Rust 學習筆記:安裝 Rust Rust 學習筆記:安裝 Rust在 Windows 上安裝 Rust命令行創建 Rust 項目在 Mac/Linux 上安裝 Rust一些命令升級卸載cargo -hrustc -h 安裝 RustRoverrust-analyzer Rust 學習筆記:安裝 Rust 在 Windows 上安裝 Rust …

Opencv圖像處理:輪廓檢測、輪廓近似、繪制外接圓外接矩形

文章目錄 一、圖像輪廓檢測1、比較2、常見的輪廓檢測方法1)基于梯度的方法2)基于邊緣檢測器的方法3)基于閾值的方法 3、查找輪廓與繪制輪廓4、參數解釋4、代碼解釋1)讀取原圖像灰度圖并用二值化顯示2)輪廓繪制3&#x…

精益數據分析(17/126):精益畫布與創業方向抉擇

精益數據分析(17/126):精益畫布與創業方向抉擇 大家好!一直以來,我都希望能和大家一起在創業和數據分析的領域中不斷探索、共同進步。今天,我們接著深入學習《精益數據分析》,這次聚焦于精益畫…

每天五分鐘深度學習PyTorch:圖像的處理的上采樣和下采樣

本文重點 在pytorch中封裝了上采樣和下采樣的方法,我們可以使用封裝好的方法可以很方便的完成采樣任務,采樣分為上采樣和下采樣。 上采樣和下采樣 下采樣(縮小圖像)的主要目的有兩個:1、使得圖像符合顯示區域的大小;2、生成對應圖像的縮略圖。 下采樣( 放大圖像)的…

代碼隨想錄訓練營第39天 || 198. 打家劫舍 213. 打家劫舍 II 337. 打家劫舍 III

198. 打家劫舍 思路: 動規五部曲: 1.dp數組及其下標的意義:dp數組表示當前房屋下偷與不偷的最大盜取金額 2.確定遞推公式:因為盜取房屋只能間隔盜取,并且還要取最大值。所以每個房屋都有盜取和不盜取兩個選擇&…

【AI 加持下的 Python 編程實戰 2_09】DIY 拓展:從掃雷小游戲開發再探問題分解與 AI 代碼調試能力(上)

DIY 拓展:從掃雷小游戲開發再探問題分解與 AI 代碼調試能力(上) 1 起因 最近在看去年剛出了第 2 版《Learn AI-assisted Python Programming》,梳理完 第七章 的知識點后,總感覺這一章的話題很好——問題分解能力的培…

使用DeepSeek-Prover-V1.5解決數學問題

DeepSeek-Prover-V1.5-RLRMaxTS是一個結合強化學習和搜索策略的自動定理證明系統。 1. 初等代數:二次方程求解 問題:解方程 x - 5x 6 0 操作步驟: 將問題轉換為Coq形式: Theorem quadratic : exists x : Z, x^2 - 5*x 6 0…

3.3 技術框架:LangChain、ReAct、Memory與Tool Integration

隨著人工智能技術的飛速發展,智能代理(Agent)已成為企業實現自動化、智能化和個性化服務的核心工具。在2025年,技術框架如LangChain、ReAct、Memory和Tool Integration在構建高效、靈活的AI代理系統中占據了重要地位。這些框架通過…

STM32F103 單片機(基于 ARM Cortex-M3 內核)的啟動過程涉及硬件初始化、固件配置和程序執行流程。

1. 啟動模式與地址映射 STM32F103 的啟動模式由 BOOT0 和 BOOT1 引腳配置決定,不同的啟動模式對應不同的存儲器映射: 啟動模式 映射地址范圍 說明 主 Flash 0x08000000~0x0807FFFF 用戶程序存儲在 Flash 中,復位后從 Flash 啟動&#xff08…

【C語言-選擇排序算法】實現對十個數進行排序

目錄 前言 一、選擇排序算法原理 二、選擇排序算法實現對十個數進行排序 三、代碼運行示例 四、選擇排序算法的時間復雜度和空間復雜度分析 五、選擇排序算法的優缺點 六、總結 前言 在計算機科學領域,排序算法是基石般的存在,它們就像是整理雜亂…

配置Intel Realsense D405驅動與ROS包

配置sdk使用 Ubuntu20.04LTS下安裝Intel Realsense D435i驅動與ROS包_realsense的驅動包-CSDN博客 中的方法一 之后不通過apt安裝包,使用官方的安裝步驟直接clone https://github.com/IntelRealSense/realsense-ros/tree/ros1-legacy 從這一步開始 執行完 這一步…

基于SpringBoot的中華詩詞文化分享平臺-項目分享

基于SpringBoot的中華詩詞文化分享平臺-項目分享 項目介紹項目摘要管理員功能圖會員功能圖系統功能圖項目預覽會員主頁面詩詞頁面發布問題回復評論 最后 項目介紹 使用者:管理員、會員 開發技術:MySQLJavaSpringBootVue 項目摘要 本文旨在設計與實現一…

ProxySQL 性能調優工具推薦

ProxySQL 的性能優化需結合?實時監控工具?與?自動化分析平臺?,以下為常用工具分類與推薦: 一、?內置診斷工具? ProxySQL Admin 接口? 通過內置管理表直接分析性能數據: sql Copy Code SELECT * FROM stats_mysql_query_digest; – 高頻查詢分析(執行次數、平均耗…

unity TEngine學習記錄3

上一篇講了怎么使用te框架,本篇主要學習的是UI,一個游戲百分之70%都是UI的展示效果,現在讓我們繼續打開te官網找到UI部分繼續學習。 ui創建以及加載 我們根據文檔首先打開命名規則界面,大家第一次看就知道這個是干啥的,你想使用此…

23種設計模式-創建型模式之單例模式(Java版本)

Java 單例模式(Singleton Pattern)詳解 🌟 什么是單例模式? 單例模式確保一個類只有一個實例,并提供一個全局訪問點來訪問它。 🧠 使用場景 配置管理類(如讀取配置文件)日志工具類…

2025能源網絡安全大賽CTF --- Crypto wp

文章目錄 前言simpleSigninNumberTheory 前言 大半年以來寫的第一篇文章!!! simpleSignin 題目: from Crypto.Util.number import * from gmpy2 import * import osflag bxxx p next_prime(bytes_to_long(os.urandom(128))…