Java中線程的生命週期
已發表: 2023-01-27目錄
Java 線程基礎:
Java 中的線程有助於在單個進程內執行多個活動。 它被認為是一個輕量級的過程。 線程也可以定義為一系列已執行的語句。 Java 中的每個線程都有自己的堆棧、程序計數器和局部變量。 Java 線程也可能是一系列嵌套的方法調用。 內存、每個進程的狀態和文件由線程共享。
Java中線程的使用:
- 執行後台或異步處理
- 增強 GUI 應用程序的靈敏度
- 實現多處理器系統的積極方面
- 在存在多個的情況下簡化編程邏輯
調用線程時存在兩條執行路徑。 兩條路徑之一用於線程執行,另一條路徑將跟踪線程調用之後的語句。 Java中的每個線程都有獨立的內存空間和棧。
在 Java 代碼中使用線程時遇到的風險因素如下。
- 在線程訪問公共變量以一致地查看數據的情況下,需要線程之間的適當協調。
- 線程的性能和維護,如果在程序中過度使用,就會變得困難。
Java中線程的生命週期:
在程序執行的任何時刻,Java 中的線程都處於以下任何一種狀態。
- 新的
- 封鎖
- 可運行
- 定時等待
- 等待
- 終止
Java線程生命週期詳解
新線程:
新創建的線程處於“新建”狀態。 在此狀態下不進行運行。 處於新狀態的線程代碼的執行尚未發生。 它尚未運行。
可運行狀態:
處於可運行狀態的線程已準備好運行。 處於此狀態的線程可能隨時準備運行,也可能已經在運行。 線程調度程序負責為線程運行分配時間。 在多線程程序中,每個單獨的線程都被分配了特定的時間。 每個單獨的線程運行一小段時間,然後遇到暫停。 然後將 CPU 交給另一個線程,以便為其他線程提供運行機會。 此時,所有等待CPU的準備運行線程和當前正在運行的線程都處於可運行狀態。
查看我們的免費技術課程,在競爭中脫穎而出。
探索我們的熱門軟件工程課程
LJMU & IIITB 計算機科學碩士 | 加州理工學院 CTME 網絡安全證書課程 |
全棧開發訓練營 | 區塊鏈PG項目 |
全棧開發中的執行 PG 計劃 | |
在下面查看我們所有的課程 | |
軟件工程課程 |
等待/阻塞狀態:
當線程暫時不運行時,它處於以下任何一種狀態。
- 等待
- 封鎖
等待 I/O 完成的線程處於阻塞狀態。 線程調度器的功能是通過重新激活阻塞或等待線程來調度它的執行。 處於此狀態的任何線程都不允許進一步繼續執行,直到它轉換為可運行狀態。 處於阻塞或等待狀態的線程不使用任何 CPU 週期。
當一個線程試圖訪問當前受其他線程保護的代碼的受保護部分時,它會被強制阻塞。 當為所有線程解鎖該部分時,調度程序將等待受保護部分的線程之一轉換為可運行狀態。 另一方面,當一個線程在特定條件下等待另一個線程時,它處於等待狀態。 一旦滿足指定的等待條件,處於等待狀態的線程將被推送到可運行狀態。 如果當前正在運行的線程進入等待/阻塞狀態,則線程調度程序會調度可運行序列中的另一個線程運行。
定時等待:
當使用超時參數調用方法時,線程處於定時等待狀態。 線程將繼續處於此狀態,直到指定的超時完成或直到收到通知。 例如,如果一個線程調用條件等待或睡眠,它就會轉換為定時等待狀態。
終止狀態:
由於以下任一原因,線程會終止。
- 線程內代碼段執行完成後線程正常退出。
- 發生任何罕見的錯誤事件,例如未處理的異常和分段錯誤。
處於終止狀態的線程不消耗任何 CPU 週期。
從世界一流大學在線學習軟件開發課程。 獲得執行 PG 課程、高級證書課程或碩士課程,以快速推進您的職業生涯。
需求軟件開發技能
JavaScript 課程 | 核心 Java 課程 | 數據結構課程 |
Node.js 課程 | 課程 | 全棧開發課程 |
NFT課程 | 開發運營課程 | 大數據課程 |
React.js 課程 | 網絡安全課程 | 雲計算課程 |
數據庫設計課程 | Python 課程 | 加密貨幣課程 |
Java中線程狀態的實現:
要在 Java 中完成線程的當前狀態,我們使用方法 Thread.getState()。 Java 還提供了 java.lang.Thread.State 類,其中定義了線程狀態的 ENUM 常量。 詳細信息總結在下表中。
常量類型 | 宣言 | 描述 |
新的 | 公共靜態最終 Thread.State 新 | 它是剛剛創建但尚未開始執行的線程的線程狀態。 |
可運行 | public static final Thread.State RUNNABLE | 它描述了已經運行的線程或處於準備運行狀態的線程的狀態。 同一線程對於 Java 虛擬機可以處於可運行狀態,而對於其他操作系統資源(例如處理器)則處於等待狀態。 |
封鎖 | public static final Thread.State BLOCKED | 它描述了阻塞等待監視器鎖的線程的狀態。 它保持相同的狀態,直到監視器塊進入同步方法/塊或在調用 Object.wait() 後重新進入同步方法。 |
等待 | 公共靜態最終 Thread.State 等待 | 它描述了由於調用以下方法之一而等待的線程狀態。
等待狀態可能是因為另一個線程完成了特定任務。 |
定時等待 | 公共靜態最終 Thread.State TIMED_WAITING | 它是等待指定時間的線程的一種狀態。 調用以下任何方法都會導致線程處於定時等待狀態,並具有指定的正等待時間。
|
終止 | public static final Thread.State 已終止 | 它是已完成執行其組成代碼語句的線程的狀態。 |
線程剛創建時處於 NEW 狀態。 當在線程上調用 .start() 方法時,線程調度程序會將其移至 Runnable 狀態。 當在線程實例上調用 join() 方法時,當前正在執行代碼語句的線程將等待該線程終止。 因此,在控制台上打印最終語句之前,程序會在線程 2 上調用 join() 函數,並使線程 1 保持等待狀態,直到線程 2 完成其執行並進入終止狀態。 由於線程 1 正在等待線程 2 的執行完成,因此它處於 WAITING 狀態。
閱讀我們與軟件開發相關的熱門文章
如何在 Java 中實現數據抽象? | Java中的內部類是什麼? | Java 標識符:定義、語法和示例 |
通過示例了解 OOPS 中的封裝 | C 中的命令行參數解釋 | 2022 年雲計算的十大特點 |
Java 中的多態性:概念、類型、特徵和示例 | Java 中的包以及如何使用它們? | Git 初學者教程:從零開始學習 Git |
在 Java 程序中使用線程的優缺點:
在 Java 程序中使用線程有以下好處。
- 減少開發代碼所需的時間
- 降低維護成本
- 增強複雜應用程序的性能
- 提高用戶界面的響應度
- 並行化任務
- 線程用於服務器應用程序以提高資源的高吞吐量和利用率。
- 如果一個線程無法使用所有 CPU 的計算資源,則另一個線程的運行將保持這些資源的佔用。
- 如果同一組數據被多個線程操作,它們的緩存是可以共享的。 這導致更好地使用緩存或協調其值。
在 Java 程序中使用線程有幾個缺點。 下面列出了其中一些。
- 在共享緩存、轉換後備緩衝區 (TLB) 或任何其他硬件資源時,多個線程可能會相互干擾。
- 即使只有一個線程在運行,也不能提高線程的執行時間。 然而,執行時間的降低是允許的。 這可能是由於額外的流水線階段和/或適應線程切換硬件所需的較慢頻率。
- 與多處理相比,操作系統和應用程序都需要進行大量更改,因為硬件支持更多地暴露於多線程中的軟件。
如果您有興趣了解有關 Java、全棧軟件開發的更多信息,請查看 upGrad 和 IIIT-B 的軟件開發執行 PG 課程——全棧開發專業化,該課程專為在職專業人士設計,並提供 500 多個小時的嚴格培訓、9 個以上的項目和任務、IIIT-B 校友身份、實用的實踐頂點項目和頂級公司的工作協助。