偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

線程有幾種狀態(tài),狀態(tài)之間的流轉(zhuǎn)是怎樣的?

開發(fā) 前端
JVM 不強(qiáng)制區(qū)分 運(yùn)行中 和 就緒中,因?yàn)閺?JVM 的角度看,線程要么處于 RUNNABLE 狀態(tài),要么因?yàn)槟撤N原因(如阻塞、等待等)不再處于運(yùn)行狀態(tài)。?

Java 中的線程有六種狀態(tài),這些狀態(tài)定義在 Thread.State 枚舉中。以下是這六種狀態(tài)及其之間的流轉(zhuǎn)關(guān)系:

線程的六種狀態(tài)

  1. NEW(新建狀態(tài)):

線程在創(chuàng)建后,但還沒有調(diào)用 start() 方法時(shí),處于 NEW 狀態(tài)。

線程對(duì)象被實(shí)例化,但還未開始執(zhí)行。

  1. RUNNABLE(可運(yùn)行狀態(tài)):

線程調(diào)用了 start() 方法后,進(jìn)入 RUNNABLE 狀態(tài)。

線程可能正在執(zhí)行(CPU 正在執(zhí)行該線程),也可能是就緒狀態(tài),等待操作系統(tǒng)調(diào)度執(zhí)行。注意:在 Java 中,RUNNABLE 既包括了線程在運(yùn)行的狀態(tài),也包括了線程準(zhǔn)備好可以運(yùn)行但暫時(shí)未被操作系統(tǒng)調(diào)度的狀態(tài)。

  1. BLOCKED(阻塞狀態(tài)):

線程處于 BLOCKED 狀態(tài)時(shí),表示它正在等待獲取某個(gè)鎖,以便執(zhí)行接下來的操作。

這種狀態(tài)通常發(fā)生在多個(gè)線程競(jìng)爭(zhēng)同一資源(如鎖)時(shí)。線程在等待獲得鎖時(shí)被阻塞,直到鎖可用。

  1. WAITING(等待狀態(tài)):

線程調(diào)用了 Object.wait()。

線程調(diào)用了 Thread.join()(沒有指定超時(shí))。

線程調(diào)用了 LockSupport.park()。

線程進(jìn)入 WAITING 狀態(tài)時(shí),表示它正在等待其他線程的某個(gè)操作來喚醒它,且沒有設(shè)定超時(shí)限制。

常見的情況是:

  1. TIMED_WAITING(定時(shí)等待狀態(tài)):

線程調(diào)用了 Thread.sleep(milliseconds)。

線程調(diào)用了 Object.wait(milliseconds)。

線程調(diào)用了 Thread.join(milliseconds)。

線程調(diào)用了 LockSupport.parkNanos() 或 LockSupport.parkUntil()。

線程進(jìn)入 TIMED_WAITING 狀態(tài)時(shí),表示它正在等待某個(gè)條件滿足,但等待是有超時(shí)限制的。

線程會(huì)等待一段時(shí)間,超時(shí)后會(huì)自動(dòng)被喚醒。

常見的情況是:

  1. TERMINATED(終止?fàn)顟B(tài)):

線程在執(zhí)行完畢后,進(jìn)入 TERMINATED 狀態(tài)。

線程的生命周期結(jié)束,線程對(duì)象不能再被啟動(dòng)。

線程因?yàn)檎M瓿扇蝿?wù),或者由于異常等原因結(jié)束時(shí)都會(huì)進(jìn)入這個(gè)狀態(tài)。

狀態(tài)之間的流轉(zhuǎn)

  • NEW → RUNNABLE

調(diào)用 Thread.start() 方法后,線程從 NEW 狀態(tài)變?yōu)?RUNNABLE 狀態(tài)。

  • RUNNABLE → BLOCKED
  • 線程試圖獲取已被其他線程持有的監(jiān)視器鎖時(shí),會(huì)從 RUNNABLE 狀態(tài)變?yōu)?BLOCKED 狀態(tài)。

  • BLOCKED → RUNNABLE

  • 當(dāng)線程獲取到所需的監(jiān)視器鎖時(shí),會(huì)從 BLOCKED 狀態(tài)變?yōu)?RUNNABLE 狀態(tài)。

  • RUNNABLE → WAITING

  • 線程調(diào)用 Object.wait(), Thread.join(), LockSupport.park() 等方法后,會(huì)從 RUNNABLE 狀態(tài)變?yōu)?WAITING 狀態(tài)。

  • RUNNABLE → TIMED_WAITING

  • 線程調(diào)用 Thread.sleep(long millis), Object.wait(long timeout), Thread.join(long millis), LockSupport.parkNanos(long nanos), LockSupport.parkUntil(long deadline) 等方法后,會(huì)從 RUNNABLE 狀態(tài)變?yōu)?TIMED_WAITING 狀態(tài)。

  • WAITING → RUNNABLE

  • 當(dāng)?shù)却龡l件滿足時(shí),例如 Object.notify(), Object.notifyAll(), Thread.interrupt() 等方法被調(diào)用后,線程會(huì)從 WAITING 狀態(tài)變?yōu)?RUNNABLE 狀態(tài)。

  • TIMED_WAITING → RUNNABLE

  • 當(dāng)?shù)却龝r(shí)間到期或等待條件滿足時(shí),線程會(huì)從 TIMED_WAITING 狀態(tài)變?yōu)?RUNNABLE 狀態(tài)。

  • RUNNABLE → TERMINATED

  • 當(dāng)線程的 run() 方法正常結(jié)束或拋出未捕獲的異常時(shí),線程會(huì)從 RUNNABLE 狀態(tài)變?yōu)?TERMINATED 狀態(tài)。

圖解

+--------+      start()     +-----------+
  |  NEW   |  ------------>  | RUNNABLE  |
  +--------+                 +-----------+
                               |       |
                           +---+       +---+
                           |                       |
                           v                       v
                    +-----------+          +---------------+
                    |  BLOCKED  |          |  WAITING      |
                    +-----------+          +---------------+
                               |                       |
                           +---+       +---+
                           |           |
                           v           v
                    +-----------------+
                    | TIMED_WAITING   |
                    +-----------------+
                               |
                           +---+
                           |
                           v
                    +-----------+
                    | TERMINATED|
                    +-----------+

總結(jié):

  • NEW:線程尚未啟動(dòng)。
  • RUNNABLE:線程正在等待 CPU 調(diào)度執(zhí)行,可能正在運(yùn)行,也可能等待 CPU 資源。
  • BLOCKED:線程正在等待獲取鎖。
  • WAITING:線程正在等待其他線程的通知(沒有超時(shí))。
  • TIMED_WAITING:線程正在等待某個(gè)條件滿足,并且設(shè)置了超時(shí)。
  • TERMINATED:線程已經(jīng)執(zhí)行完畢并結(jié)束。

WAITING 和 TIMED_WAITING 的區(qū)別?

  • WAITING 是無條件的等待,線程會(huì)一直等待直到被其他線程喚醒。
  • TIMED_WAITING 是帶有超時(shí)的等待,線程會(huì)等待一段時(shí)間,超時(shí)后自動(dòng)喚醒。

這兩種狀態(tài)的關(guān)鍵區(qū)別是 是否有超時(shí)限制,WAITING 沒有時(shí)間限制,而 TIMED_WAITING 是有超時(shí)的。 

為什么線程沒有RUNNING狀態(tài)?

因?yàn)樗c RUNNABLE 狀態(tài)的概念重合。

具體原因:

  1. RUNNABLE 狀態(tài)包括正在執(zhí)行和就緒的線程:

在 Java 的線程狀態(tài)模型中,RUNNABLE 狀態(tài)既包括了線程已經(jīng)在 CPU 上執(zhí)行的狀態(tài)(實(shí)際上正在運(yùn)行),也包括了線程處于就緒隊(duì)列中,等待 CPU 分配時(shí)間片的狀態(tài)。

線程一旦被操作系統(tǒng)調(diào)度執(zhí)行,它就進(jìn)入 RUNNABLE 狀態(tài),但這個(gè)狀態(tài)的定義并不區(qū)分是否正在執(zhí)行。操作系統(tǒng)負(fù)責(zé)將線程從就緒隊(duì)列中調(diào)度到實(shí)際的執(zhí)行狀態(tài),并且 Java 并不會(huì)對(duì)這個(gè)過程做細(xì)分。

  1. 線程狀態(tài)模型的設(shè)計(jì):

Java 線程狀態(tài)模型的設(shè)計(jì)簡(jiǎn)化了線程的生命周期管理,沒有單獨(dú)為運(yùn)行中的線程定義一個(gè)狀態(tài)。RUNNABLE 狀態(tài)作為一個(gè)集合狀態(tài),能夠涵蓋線程既可能在執(zhí)行也可能在等待 CPU 資源的場(chǎng)景。

在操作系統(tǒng)中,線程的調(diào)度是由操作系統(tǒng)內(nèi)核進(jìn)行的,Java 并不直接控制線程的執(zhí)行時(shí)間或如何選擇線程,而是通過 Java 的線程調(diào)度器(JVM)委托給操作系統(tǒng)。所以,線程一旦在運(yùn)行,實(shí)際上是 "正在運(yùn)行" 或 "就緒等待" 都在 RUNNABLE 狀態(tài)下進(jìn)行管理。

  1. JVM 調(diào)度與操作系統(tǒng)的區(qū)別:

線程的生命周期與操作系統(tǒng)的調(diào)度密切相關(guān)。在 Java 中,線程進(jìn)入 RUNNABLE 狀態(tài)意味著它已經(jīng)準(zhǔn)備好由操作系統(tǒng)調(diào)度,但操作系統(tǒng)可能會(huì)把它從 CPU 上切換出去,導(dǎo)致線程不再“運(yùn)行”。

JVM 不強(qiáng)制區(qū)分 運(yùn)行中 和 就緒中,因?yàn)閺?JVM 的角度看,線程要么處于 RUNNABLE 狀態(tài),要么因?yàn)槟撤N原因(如阻塞、等待等)不再處于運(yùn)行狀態(tài)。

責(zé)任編輯:武曉燕 來源: 架構(gòu)殿堂
相關(guān)推薦

2023-11-29 16:29:09

線程java

2022-03-23 08:51:21

線程池Java面試題

2024-04-16 09:21:59

Spring流轉(zhuǎn)狀態(tài)數(shù)據(jù)狀態(tài)處理

2022-08-29 16:03:33

狀態(tài)流轉(zhuǎn)Java

2024-04-30 11:14:19

KubernetesReplicaSet數(shù)量

2022-10-12 14:23:30

Java線程

2025-10-29 07:38:45

2023-12-01 14:57:22

TCP連接

2021-12-26 18:22:30

Java線程多線程

2023-06-28 07:45:51

Java線程狀態(tài)

2013-12-09 09:56:30

NAT64IPv6stateful

2024-11-18 16:28:20

2024-09-27 11:29:32

2021-01-31 23:58:04

MySQL狀態(tài)表數(shù)據(jù)源

2022-04-18 07:36:37

TimeUnit線程休眠

2024-05-30 11:53:51

2023-05-08 23:20:49

WebYARN管理

2020-08-06 10:12:20

TCP連接網(wǎng)絡(luò)協(xié)議

2017-07-10 14:53:35

前端開發(fā)MVVM模式有限狀態(tài)機(jī)

2017-10-27 07:11:38

TomcatUPDOWN
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)