Java 線程的生命周期管理

引言

線程是 Java 編程中重要的概念之一。通過多線程,程序可以同時執行多個任務,提高效率和響應能力。理解和管理線程的生命周期是編寫高效并發程序的關鍵。本文將詳細介紹 Java 線程的生命周期管理,并解釋幾種關鍵方法:start()sleep(long millis)join()yield()interrupt()

線程的生命周期

Java 線程的生命周期可以分為五個主要階段:

  1. 新建(New):線程對象被創建,但尚未調用 start() 方法。
  2. 就緒(Runnable):線程對象調用了 start() 方法,等待 CPU 調度執行。
  3. 運行(Running):線程獲得 CPU 資源,開始執行 run() 方法。
  4. 阻塞(Blocked):線程因為某種原因(如等待資源)暫時停止執行。
  5. 死亡(Dead):線程執行完 run() 方法或被終止,進入死亡狀態。

線程的生命周期管理方法

start(): 啟動線程

start() 方法用于啟動線程,它將線程從新建狀態轉移到就緒狀態,并等待 CPU 調度執行。調用 start() 方法后,JVM 會調用線程的 run() 方法。

public class StartExample extends Thread {@Overridepublic void run() {System.out.println("Thread is running");}public static void main(String[] args) {StartExample thread = new StartExample();thread.start(); // 啟動線程}
}

sleep(long millis): 使線程休眠指定的時間

Thread.sleep(long millis) 方法使當前線程暫停執行一段時間(以毫秒為單位),進入阻塞狀態。這對模擬延時或控制線程執行的節奏非常有用。

public class SleepExample extends Thread {@Overridepublic void run() {try {System.out.println("Thread is going to sleep");Thread.sleep(2000); // 休眠2秒System.out.println("Thread is awake");} catch (InterruptedException e) {e.printStackTrace();}}public static void main(String[] args) {SleepExample thread = new SleepExample();thread.start();}
}

join(): 等待線程終止

join() 方法使當前線程等待調用 join() 的線程執行完畢再繼續執行。這在需要確保某個線程完成其任務后再執行其他任務時非常有用。

public class JoinExample extends Thread {@Overridepublic void run() {System.out.println("Thread is running");}public static void main(String[] args) {JoinExample thread = new JoinExample();thread.start();try {thread.join(); // 等待 thread 執行完畢System.out.println("Thread has finished");} catch (InterruptedException e) {e.printStackTrace();}}
}

yield(): 暫停當前正在執行的線程對象,并執行其他線程

Thread.yield() 方法使當前正在執行的線程讓出 CPU 資源,但不會進入阻塞狀態,仍然處于就緒狀態。這有助于提高 CPU 使用效率,讓其他同優先級的線程有機會執行。

public class YieldExample extends Thread {@Overridepublic void run() {for (int i = 0; i < 5; i++) {System.out.println(Thread.currentThread().getName() + " - " + i);Thread.yield(); // 讓出 CPU 資源}}public static void main(String[] args) {YieldExample thread1 = new YieldExample();YieldExample thread2 = new YieldExample();thread1.start();thread2.start();}
}

interrupt(): 中斷線程

interrupt() 方法用于中斷線程。當一個線程被中斷時,如果它處于阻塞狀態(例如在調用 sleep() 方法時),會拋出 InterruptedException 異常;如果它沒有處于阻塞狀態,則會設置線程的中斷標志。

public class InterruptExample extends Thread {@Overridepublic void run() {try {while (!Thread.currentThread().isInterrupted()) {System.out.println("Thread is running");Thread.sleep(1000);}} catch (InterruptedException e) {System.out.println("Thread was interrupted");}}public static void main(String[] args) {InterruptExample thread = new InterruptExample();thread.start();try {Thread.sleep(3000); // 主線程休眠3秒thread.interrupt(); // 中斷子線程} catch (InterruptedException e) {e.printStackTrace();}}
}

結論

Java 提供了多種方法來管理線程的生命周期,包括 start()sleep(long millis)join()yield()interrupt()。通過理解和正確使用這些方法,可以有效地控制線程的執行,提高程序的并發性能。

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

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

相關文章

第7篇 智能合約是什么?——從產品經理視角看智能合約

引言 親愛的讀者們,歡迎大家來到我們的《區塊鏈常識:從小白到頂級行業專家》專欄的第7篇!今天,我們要揭開智能合約的神秘面紗。別擔心,這不是法律術語的堆砌,也不是代碼的迷宮,而是一個讓你在區塊鏈上實現奇妙想法的魔法工具。準備好了嗎?讓我們開始吧! 智能合約的定…

RedHat9 | podman容器-續集

一、管理容器存儲和網絡資源 使用容器來運行簡單的進程&#xff0c;然后退出。可以配置容連續運行特定服務&#xff0c;如數據庫服務。如果持續運行服務&#xff0c;需要向容器添加更多的資源&#xff0c;如持久存儲或對其他網絡的訪問權限。 針對企業容器平臺上的大型部署&a…

為Ubuntu-24.04-live-server-amd64磁盤擴容

系列文章目錄 Ubuntu-24.04-live-server-amd64安裝界面中文版 文章目錄 系列文章目錄前言一、檢查系統本身情況1.用 lsblk 命令查看自己系統磁盤是什么狀態2.用 df -h 命令查看文件系統的磁盤空間使用情況3.解決 Ubuntu-24.04 磁盤空間只能用一半的問題3-1擴展邏輯卷&#xff…

這才是CSDN最系統的網絡安全學習路線(建議收藏)

01 什么是網絡安全 網絡安全可以基于攻擊和防御視角來分類&#xff0c;我們經常聽到的 “紅隊”、“滲透測試” 等就是研究攻擊技術&#xff0c;而“藍隊”、“安全運營”、“安全運維”則研究防御技術。 無論網絡、Web、移動、桌面、云等哪個領域&#xff0c;都有攻與防兩面…

基于X86+FPGA+AI的智能倉儲AGV機器人解決方案

應用場景 智能倉儲是物流過程的一個環節&#xff0c;智能倉儲的應用&#xff0c;保證了貨物倉庫管理各個環節數據輸入的速度和準確性&#xff0c;確保企業及時準確地掌握庫存的真實數據&#xff0c;合理保持和控制企業庫存&#xff0c;其中搬運環節目前已大量采用AGV的方式進行…

python-邏輯語句

if else語句 不同于C&#xff1a;else if range語句&#xff1a; continue continue的作用是&#xff1a; 中斷所在循環的當次執行&#xff0c;直接進入下一次 continue在嵌套循環中的應用 break 直接結束所在的循環 break在嵌套循環中的應用 continue和break&#xff0c;在…

星火認知大模型Spark3.5 api調用 #AI夏令營 #Datawhale #夏令營

環境安裝 pip install --upgrade -q spark_ai_python 官網注冊 鏈接&#xff1a;https://console.xfyun.cn/app/myapp 官方會在報名成功后&#xff0c;立即發放星火大模型 Spark Max的 API 額度助力我們完成賽事&#xff0c; 200w Tokens 任你花&#xff01; 暑期有四場夏令營…

HDC Cloud 2024 | CodeArts加速軟件智能化開發,攜手HarmonyOS重塑企業應用創新體驗

2024年6月21~23日&#xff0c;華為開發者大會HDC 2024在東莞溪流背坡村隆重舉行。期間華為云主辦了以“CodeArts加速軟件智能化開發&#xff0c;攜手HarmonyOS重塑企業應用創新體驗”為主題的分論壇。論壇匯聚了各行各業的專家學者、技術領袖和開發者&#xff0c;共同探討Harmo…

養殖自動化管理系統:開啟智慧養殖新篇章

在現代農業的快速演進中&#xff0c;養殖業正經歷一場前所未有的技術革命。養殖自動化管理系統&#xff0c;作為這場變革的前沿科技&#xff0c;正逐步成為推動行業高效、環保、可持續發展的關鍵力量。本文將深入探討自動化養殖系統如何通過精準管理、智能監控、數據驅動決策&a…

C++ 把類封裝成靜態鏈接庫

目錄 一、動態鏈接庫和靜態鏈接庫的區別 二、對比 1、靜態鏈接庫 (Static Library) 2、動態鏈接庫 (Dynamic Library) 三、制作步驟 1. 創建類頭文件 2. 實現類 3. 創建靜態鏈接庫工程 4. 構建靜態鏈接庫 5. 使用靜態鏈接庫 6、添加靜態庫和頭文件路徑 一、動態鏈接庫…

SpringCloud_Ribbon負載均衡

概述 SpringCloud底層其實是利用了一個名為Ribbon的組件&#xff0c;來實現負載均衡功能的。 源碼 LoadBalancerInterceptor 其中含有intercept方法&#xff0c;攔截用戶的HttpRequest請求&#xff1a; request.getURI() 獲取請求uri&#xff0c;即http://userservice/use…

3D Gaussian Splatting代碼中的Gaussian_Module和Cameras兩個類的代碼解讀

Gaussian_model 討論Gaussian_model這個類&#xff0c;是因為里面包含了三維高斯分布的基本信息&#xff0c;里面定義了各種參量的構建方式、用于優化學習的激活函數、學習率設置方法和高斯點優化過程中的增加與刪除方式及對應優化器的處理方法。這個類定義在scene文件夾中的g…

反激開關電源反饋電路相關參數選型

Vb的電壓正常變化范圍是&#xff1a;0-1V&#xff08;最低0V&#xff0c;由于有穩壓管&#xff0c;最高不會超過1V&#xff09; Vb的電壓越高&#xff0c;則輸出占空比越大&#xff0c;Vb電壓越低&#xff0c;則輸出占空比越小 那么Va的正常變化范圍應該是&#xff1a;1.4-4.…

怎么配置electron-builder

electron-builder 是一個用于 Electron 應用程序打包和發布的工具,它支持 macOS、Windows 和 Linux 平臺。以下是一個清晰且詳細的 electron-builder 配置指南,包括分點表示和歸納,并參考了相關文章中的信息。 一、安裝 electron-builder 首先,你需要在你的 Electron 項目…

云卓SKYDROID-H30——科技改變未來

云卓H30采用高通處理器、搭載安卓嵌入式系統&#xff0c;擁有三個工作頻率&#xff0c;讓圖像更清晰、延遲更低、距離遠、抗干擾性強&#xff0c;支持多種接口&#xff0c;更有10.1寸高清工業級陽光可視屏&#xff0c;防塵耐磨&#xff0c;結構強度高&#xff0c;適用于各種嚴苛…

Python和tkinter單詞游戲

Python和tkinter單詞游戲 數據字典文本文件&#xff0c;文件名為Dictionary.txt&#xff0c;保存編碼格式為&#xff1a;utf-8。文本內容&#xff1a;每行一個 單詞 &#xff0c;單詞和解釋用空格分隔&#xff0c;如 a art.一(個)&#xff1b;每一(個) ability n.能力&#…

springboot實驗報告管理系統-計算機畢業設計源碼10596

目錄 1 緒論 1.1 選題背景與意義 1.2國內外研究現狀 1.3論文結構與章節安排 2系統分析 2.1 可行性分析 2.2 系統流程分析 2.2.1系統開發流程 2.2.2 用戶登錄流程 2.2.3 系統操作流程 2.2.4 添加信息流程 2.2.5 修改信息流程 2.2.6 刪除信息流程 2.3 系統功能分析 …

HarmonyOS Next開發學習手冊——單選框 (Radio)

Radio是單選框組件&#xff0c;通常用于提供相應的用戶交互選擇項&#xff0c;同一組的Radio中只有一個可以被選中。具體用法請參考 Radio 。 創建單選框 Radio通過調用接口來創建&#xff0c;接口調用形式如下&#xff1a; Radio(options: {value: string, group: string})…

高考不是終點:如何利用教育資源實現人生躍遷?普魯士教育的利弊,你了解嗎?從科舉到高考,中國教育的變遷!鏈接上層,獲取核心資源的途徑

高考已經結束&#xff0c;這兩天分數將會陸續出來&#xff0c;無論結果好壞&#xff0c;我都希望你明白一些道理。這些道理在學校老師不會教你&#xff0c;但是非常重要。 一、中國的科舉制度 科舉制度是為王朝服務的。 科舉制度是中國古代通過考試選拔官員的制度&#xff0c…

C++類型轉換可調用對象

目錄 C的四種可視性類型轉換 1.static_cast 2.reinterpret_cast 3.const_cast 4.dynamic_cast C中的可調用對象 普通函數 函數指針 仿函數 Lambda表達式 包裝器function bind C的四種可視性類型轉換 C語言中的類型轉換是不安全、不明確的&#xff0c;于是C就出了更…