這篇文章帶給大家的內容是關於Java線程的生命週期的介紹(附範例),有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。
一、執行緒的生命週期
進程與執行緒一樣,都具有一定的生命週期,執行緒的生命週期包含四個狀態:建立狀態、就緒狀態、阻塞狀態、死亡狀態。
1.創建狀態
1)是指使用new實例化一個線程對象,但該線程對象還未使用start()方法啟動線程這個階段,該階段只在內存的堆中為此物件的實例變數分配了記憶體空間,但執行緒還無法參與搶奪CPU的使用權;
#2)創建完畢線程物件後,啟動該線程物件的是start()方法,而不是run()方法。
2.就緒狀態
1)是指一個執行緒物件使用start()方法後到執行完run()方法的這個階段,執行緒一旦就進入就緒階段,Java虛擬機為此執行緒建立方法的呼叫堆疊和計數器等;
2)在某一單位時間(時間片)內,CPU只能執行一個執行緒,一但一個執行緒擁有了CPU的使用權,則該執行緒也可稱為正在運行狀態;
3)凡是處於就緒狀態的執行緒都被視為活動的,可以使用isAlive()方法測試執行緒是否處於就緒狀態,使用activeCount()來查詢目前執行緒所在執行緒池的活動執行緒數;
4)處於就緒狀態的執行緒並不是運行狀態,在以前的電腦很多都是單處理器的,要在同一時刻運行所有處於就緒狀態的執行緒是不可能的,Java透過一些調度演算法來保證這些執行緒共享使用處理器(如時間片輪轉演算法、獨佔演算法等)。
3.阻塞狀態:
1)阻塞狀態包含四個狀態(睡眠狀態、阻塞狀態、掛起狀態、等待狀態),一般來說,阻塞狀態和就緒狀態可以互相切換的;
2)使用sleep()方法可以執行緒進入睡眠狀態,讓其他行程得到執行機會,但是用sleep方法必須捕捉InterruptedExecption異常;
#3)使用suspend方法可以掛起執行緒(jdk1.2後已過時)、使用wait方法使執行緒進入等待狀態(後面有一個隨筆會專門寫)、使用I/O中斷讓執行緒進入阻塞狀態。
4.死亡狀態:
1)一旦執行緒執行完run方法,執行緒即進入死亡狀態,Java虛擬機會銷毀處於死亡狀態的執行緒物件所佔用的系統資源;
2)執行緒執行時遇到一個未捕獲的異常,執行緒會被終止並進入死亡狀態;呼叫stop方法也可以讓執行緒進入死亡狀態,但是容易造成死鎖,已棄用。
5.執行緒生命週期如下圖:
#二、以下是sleep方法讓執行緒進入睡眠狀態的案例
/** * @author: PrincessHug * @date: 2019/4/12, 9:20 * @Blog: https://www.cnblogs.com/HelloBigTable/ */ public class SleepDemo implements Runnable{ @Override public void run() { long l; for (int i=1;i<6;i++){ l = System.currentTimeMillis(); try { Thread.currentThread().sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } l = (System.currentTimeMillis() - l); System.out.println(Thread.currentThread().getName() + "线程执行了" + i + "次,耗时" + l + "毫秒。"); } } } public class SleepDriver { public static void main(String[] args) { SleepDemo sd = new SleepDemo(); for (int i=0;i<50;i++){ new Thread(sd,i + "#").start(); } } }
下面是部分運行結果截圖:
可以看到如果同時啟動的執行緒越多,會導致每個執行緒的耗時越長。
以上是Java線程的生命週期的介紹(附範例)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

Java在企業級應用中被廣泛使用是因為其平台獨立性。 1)平台獨立性通過Java虛擬機(JVM)實現,使代碼可在任何支持Java的平台上運行。 2)它簡化了跨平台部署和開發流程,提供了更大的靈活性和擴展性。 3)然而,需注意性能差異和第三方庫兼容性,並採用最佳實踐如使用純Java代碼和跨平台測試。

JavaplaysigantroleiniotduetoitsplatFormentence.1)itallowscodeTobewrittenOnCeandrunonVariousDevices.2)Java'secosystemprovidesuseusefidesusefidesulylibrariesforiot.3)

ThesolutiontohandlefilepathsacrossWindowsandLinuxinJavaistousePaths.get()fromthejava.nio.filepackage.1)UsePaths.get()withSystem.getProperty("user.dir")andtherelativepathtoconstructthefilepath.2)ConverttheresultingPathobjecttoaFileobjectifne

Java'splatFormIndenceistificantBecapeitAllowSitallowsDevelostWriTecoDeonCeandRunitonAnyPlatFormwithAjvm.this“ writeonce,runanywhere”(era)櫥櫃櫥櫃:1)交叉plat formcomplibility cross-platformcombiblesible,enablingDeploymentMentMentMentMentAcrAptAprospOspOspOssCrossDifferentoSswithOssuse; 2)

Java適合開發跨服務器web應用。 1)Java的“一次編寫,到處運行”哲學使其代碼可在任何支持JVM的平台上運行。 2)Java擁有豐富的生態系統,包括Spring和Hibernate等工具,簡化開發過程。 3)Java在性能和安全性方面表現出色,提供高效的內存管理和強大的安全保障。

JVM通過字節碼解釋、平台無關的API和動態類加載實現Java的WORA特性:1.字節碼被解釋為機器碼,確保跨平台運行;2.標準API抽像操作系統差異;3.類在運行時動態加載,保證一致性。

Java的最新版本通過JVM優化、標準庫改進和第三方庫支持有效解決平台特定問題。 1)JVM優化,如Java11的ZGC提升了垃圾回收性能。 2)標準庫改進,如Java9的模塊系統減少平台相關問題。 3)第三方庫提供平台優化版本,如OpenCV。

JVM的字節碼驗證過程包括四個關鍵步驟:1)檢查類文件格式是否符合規範,2)驗證字節碼指令的有效性和正確性,3)進行數據流分析確保類型安全,4)平衡驗證的徹底性與性能。通過這些步驟,JVM確保只有安全、正確的字節碼被執行,從而保護程序的完整性和安全性。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

SublimeText3漢化版
中文版,非常好用

WebStorm Mac版
好用的JavaScript開發工具

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器