java線程狀態,java線程狀態有哪幾種

本文目錄一覽:

java多線程有哪些狀態?

初始態:一個線程調用了new方法之後,並在調用start方法之前的所處狀態。

就緒:一旦線程調用了start 方法,線程就轉到Runnable 狀態。

阻塞/ NonRunnable:線程處於阻塞/NonRunnable狀態,這是由兩種可能性造成的:要麼是因掛起而暫停的,要麼是由於某些原因而阻塞的,例如包括等待IO請求的完成。

停止/退出:線程轉到退出狀態,這有兩種可能性,要麼是run方法執行結束,要麼是調用了stop方法。

基於java 線程的幾種狀態

下面是java 線程的5種狀態:

1、新建(new)

新建一個線程的對象。

2、可運行(runable)

線程對象創建後,其他線程調用該線程的start方法。或者該線程位於可運行線程池中等待被線程調用,已獲取cpu的使用權。

3、運行(running)

可運行的線程獲取了cpu的使用權,執行程序代碼

4、阻塞(block)

由於某些原因該線程放棄了cpu的使用權。停止執行。除非線程進入可運行的狀態,才會有機會獲取cpu的使用權。

(1)等待阻塞:運行中的線程執行wait方法,這時候該線程會被放入等待隊列。

(2)同步阻塞:運行中的線程獲取同步鎖,如果該同步鎖被別的線程佔用,這個線程會成被放入鎖池,等待其他線程釋放同步鎖。

(3)其他阻塞:運行的線程執行sleep或者join方法這個線程會成為阻塞狀態。當sleep超時,join等待線程終止,該線程會進入可運行狀態。

5、死亡(dead)

線程run mian 執行完畢後,或者因為某些異常產生退出了 run 方法,該線程的生命周期結束。

JAVA中,線程有哪五個基本狀態?他們之間如何讓轉化?並簡述線程周期。

java中,每個線程都需經歷新生、就緒、運行、阻塞和死亡五種狀態,線程從新生到死亡的狀態變化稱為生命周期。

用new運算符和Thread類或其子類建立一個線程對象後,該線程就處於新生狀態。

線程的生命周期,把圖轉化為文字就是: 

1、線程通過new方法創建,調用start,線程進入就緒狀態,等待系統的調度(時間片輪轉調度)。當系統調度,進入運行狀態。正常結束或者異常退出,進程進入死亡狀態。

2、處於運行狀態的線程若遇到sleep,則線程進入睡眠狀態,不會讓出資源鎖,sleep結束,線程轉為就緒狀態,等待系統重新調度。

3、處於運行狀態的線程可能在等待io,也可能進入掛起狀態。io完成,轉為就緒狀態。

4、處於運行狀態的線程yield,線程轉為就緒狀態。(yield只讓給許可權比自己高的)

5、處於運行狀態的線程遇到wait,線程處於等待狀態,需要notify()/notifyALL來喚醒線程,喚醒後的線程處於鎖定狀態,獲取了「同步鎖」,之後,線程才轉為就緒狀態。處於運行的線程synchronized,加上後 變成同步操作。處於鎖定狀態,獲取了「同步鎖」,之後,線程才轉為就緒狀態。

Java中線程的可用狀態有哪些?

Java中線程的可用狀態有下面幾種:

就緒(Runnable):線程準備運行,不一定立馬就能開始執行。

運行中(Running):進程正在執行線程的代碼。

等待中(Waiting):線程處於阻塞的狀態,等待外部的處理結束。

睡眠中(Sleeping):線程被強制睡眠。

I/O阻塞(BlockedonI/O):等待I/O操作完成。

同步阻塞(BlockedonSynchronization):等待獲取鎖。

死亡(Dead):線程完成了執行。

java線程中的幾種狀態以及相互轉換

NEW: 線程創建之後,但是還沒有啟動(not yet started)。

RUNNABLE: 正在Java虛擬機下跑任務的線程的狀態。在RUNNABLE狀態下的線程可能會處於等待狀態, 因為它正在等待一些系統資源的釋放,比如IO

BLOCKED: 阻塞狀態,等待鎖的釋放,比如線程A進入了一個synchronized方法,線程B也想進入這個方法,但是這個方法的鎖已經被線程A獲取了,這個時候線程B就處於BLOCKED狀態

WAITING: 等待狀態,處於等待狀態的線程是由於執行了3個方法中的任意方法。 1. Object的wait方法,並且沒有使用timeout參數; 2. Thread的join方法,沒有使用timeout參數 3. LockSupport的park方法。 處於waiting狀態的線程會等待另外一個線程處理特殊的行為。 再舉個例子,如果一個線程調用了一個對象的wait方法,那麼這個線程就會處於waiting狀態直到另外一個線程調用這個對象的notify或者notifyAll方法後才會解除這個狀態

TIMED_WAITING: 有等待時間的等待狀態,比如調用了以下幾個方法中的任意方法,並且指定了等待時間,線程就會處於這個狀態。 1. Thread.sleep方法 2. Object的wait方法,帶有時間 3. Thread.join方法,帶有時間 4. LockSupport的parkNanos方法,帶有時間 5. LockSupport的parkUntil方法,帶有時間

TERMINATED: 線程中止的狀態,這個線程已經完整地執行了它的任務

JAVA中線程有哪五個基本狀態?它們之間如何讓轉化?

java中,每個線程都需經歷新生、就緒、運行、阻塞和死亡五種狀態,線程從新生到死亡的狀態變化稱為生命周期。

用new運算符和Thread類或其子類建立一個線程對象後,該線程就處於新生狀態。

新生—就緒:通過調用start()方法

就緒—運行:處於就緒狀態的線程一旦得到CPU,就進入運行狀態並自動調用自己的run()方法

運行—阻塞:處於運行狀態的線程,執行sleep()方法,或等待I/O設備資源,讓出CPU並暫時中止自己運行,進入阻塞狀態

阻塞—就緒:睡眠時間已到,或等待的I/O設備空閑下來,線程便進入就緒狀態,重新到就緒隊列中等待CPU。當再次獲得CPU時,便從原來中止位置開始繼續運行。

運行—死亡:(1)(正常情況下)線程任務完成

(2)(非正常狀況)線程被強制性的中止,如通過執行stop()或destroy()方法來終止一個線程

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/154621.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-11-16 14:13
下一篇 2024-11-16 14:13

相關推薦

  • java client.getacsresponse 編譯報錯解決方法

    java client.getacsresponse 編譯報錯是Java編程過程中常見的錯誤,常見的原因是代碼的語法錯誤、類庫依賴問題和編譯環境的配置問題。下面將從多個方面進行分析…

    編程 2025-04-29
  • Java JsonPath 效率優化指南

    本篇文章將深入探討Java JsonPath的效率問題,並提供一些優化方案。 一、JsonPath 簡介 JsonPath是一個可用於從JSON數據中獲取信息的庫。它提供了一種DS…

    編程 2025-04-29
  • Java騰訊雲音視頻對接

    本文旨在從多個方面詳細闡述Java騰訊雲音視頻對接,提供完整的代碼示例。 一、騰訊雲音視頻介紹 騰訊雲音視頻服務(Cloud Tencent Real-Time Communica…

    編程 2025-04-29
  • Java Bean載入過程

    Java Bean載入過程涉及到類載入器、反射機制和Java虛擬機的執行過程。在本文中,將從這三個方面詳細闡述Java Bean載入的過程。 一、類載入器 類載入器是Java虛擬機…

    編程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介紹

    本文將詳細介紹Java Milvus SearchParam withoutFields的相關知識和用法。 一、什麼是Java Milvus SearchParam without…

    編程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java語言中的一個版本,於2014年3月18日發布。本文將從多個方面對Java 8中某一周的周一進行詳細的闡述。 一、數組處理 Java 8新特性之一是Stream…

    編程 2025-04-29
  • Java判斷字元串是否存在多個

    本文將從以下幾個方面詳細闡述如何使用Java判斷一個字元串中是否存在多個指定字元: 一、字元串遍歷 字元串是Java編程中非常重要的一種數據類型。要判斷字元串中是否存在多個指定字元…

    編程 2025-04-29
  • VSCode為什麼無法運行Java

    解答:VSCode無法運行Java是因為默認情況下,VSCode並沒有集成Java運行環境,需要手動添加Java運行環境或安裝相關插件才能實現Java代碼的編寫、調試和運行。 一、…

    編程 2025-04-29
  • Java任務下發回滾系統的設計與實現

    本文將介紹一個Java任務下發回滾系統的設計與實現。該系統可以用於執行複雜的任務,包括可回滾的任務,及時恢復任務失敗前的狀態。系統使用Java語言進行開發,可以支持多種類型的任務。…

    編程 2025-04-29
  • Java 8 Group By 會影響排序嗎?

    是的,Java 8中的Group By會對排序產生影響。本文將從多個方面探討Group By對排序的影響。 一、Group By的概述 Group By是SQL中的一種常見操作,它…

    編程 2025-04-29

發表回復

登錄後才能評論