成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Java多線程之線程狀態

開發 后端
關于Java線程的狀態,有的人可能會說有4種狀態,有的會說有5種,6種,總之各種各樣的說法可能都有。造成這種情況的原因是:有很多的書上常常把操作系統進程狀態,線程狀態與Java線程狀態混在一起談。

[[442096]]

關于Java線程的狀態,有的人可能會說有4種狀態,有的會說有5種,6種,總之各種各樣的說法可能都有。造成這種情況的原因是:有很多的書上常常把操作系統進程狀態,線程狀態與Java線程狀態混在一起談。下面這個圖相信大家在講多線程的文章中都見到過(或類似):

這些其實是操作系統上的書上常會提到的5種 進程(process) 狀態:new,ready,running,waiting,terminated。

其實最簡單的就是直接查看Java源碼,就知道Java中線程到底定義了幾種狀態。如果我們查看JDK源碼的話,就會發現Java語言中定義的線程狀態是不同于操作系統的,我們可以在Thread.State源碼中的注釋中看到,它說得很清楚:

These states are virtual machine states which do not reflect any operating system thread states。

也就是說Java語言中定義的這些狀態都是指虛擬機狀態,它不反映任何操作系統的線程狀態。

以RUNNABLE狀態為例,源碼中的注釋是這樣說的:executing in the Java virtual machine(正在Java虛擬機中執行)。至于它是否真正在執行,不是我們要操心的事。

一個 Java 線程它所對應的操作系統內核線程中的狀態可能有Running又有Ready,但在Java虛擬機層面則統一映射成了RUNNABLE 狀態。如果Java中覺得沒必要去區分這些狀態,我們也就沒有必要去糾結這些了。

還有一些情況下,操作系統也許只有一種狀態,但在Java中又作了細分,給出了三種不同的狀態,例如會把Java狀態中的 BLOCKED,WAITING,TIMED_WAITING 三種狀態都籠統地稱為 blocked 或者 waiting 。

又或者把TIMED_WAITING 狀態當作不存在,在很多文章中從來不提有這個狀態,顯然,這種做法又是受到傳統進程狀態劃分的影響。盡管它與WAITING很像,我們最好按著 Thread.State 中的定義來,不要自己隨意發揮。

所以這就明白了,那些很多聲稱Java線程只有4種或5種狀態的文章,常常都是自作主張地合并了這些狀態,把這些東西混為一談是非常容易引發混亂的,這個我們將會在后面具體談到。

綜上所述,為避免出現混亂,厘清概念所處的層次是非常重要的。

下面我們就以 JDK1.8 源碼中為標準,分別給大家介紹一下Java線程的這6種狀態,下面我們先來看一下 JDK 中對于線程狀態的定義都有哪些。

線程的6種狀態

在 Thread 類的一個內部枚舉類 Thread.State 中明確地定義這6種狀態,如下圖所示:

狀態含義:

  • 新建態 (NEW):一個尚未啟動的線程處于這一狀態。(A thread that has not yet started is in this state.)
  • 運行態(RUNNABLE):一個正在 Java 虛擬機中執行的線程處于這一狀態。(A thread executing in the Java virtual machine is in this state.)
  • 阻塞態(BLOCKED):一個正在阻塞等待一個監視器鎖的線程處于這一狀態。(A thread that is blocked waiting for a monitor lock is in this state.)
  • 等待態(WAITING):一個正在無限期等待另一個線程執行一個特別的動作的線程處于這一狀態。(A thread that is waiting indefinitely for another thread to perform a particular action is in this state.)
  • 計時等待(TIMED_WAITING):一個正在限時等待另一個線程執行一個動作的線程處于這一狀態。(A thread that is waiting for another thread to perform an action for up to a specified waiting time is in this state.)
  • 終止態(TERMINATED):一個已經退出的線程處于這一狀態。(A thread that has exited is in this state.)

在程序運行的某個給定時間點上,一個Java線程只能處于這6種狀態中的一種。

通過上面的介紹,相信大家就可以很清晰的、明確的知道Java線程狀態到底有幾種狀態,又分別都有哪些狀態了,雖然可能對各個線程狀態的詳細含義還不是特別了解,別著急,后面我們會逐一介紹,請大家多多關注后續文章。

參考:

 

關于Java的線程狀態

 

責任編輯:武曉燕 來源: 我是開發者FTD
相關推薦

2021-12-28 09:10:55

Java線程狀態

2021-12-14 08:28:08

Java多線程線程

2010-03-16 17:16:38

Java多線程

2010-01-21 11:25:44

linux多線程線程資源

2021-02-25 15:58:46

C++線程編程開發技術

2011-06-22 16:08:40

Qt 多線程 事件循環

2021-03-05 07:38:52

C++線程編程開發技術

2011-06-22 16:02:37

Qt 多線程 重入

2017-05-27 20:59:30

Java多線程synchronize

2009-03-12 10:52:43

Java線程多線程

2017-05-08 11:46:15

Java多線程

2009-06-29 17:49:47

Java多線程

2017-05-31 14:03:07

Java多線程內置鎖與顯示鎖

2009-06-17 11:23:00

Java多線程

2013-06-07 16:30:08

iOS多線程iOS開發NSThread

2010-03-15 17:56:23

Java多線程

2012-02-14 12:31:27

Java

2011-06-13 10:41:17

JAVA

2020-11-12 18:08:05

JavaLinux多線程

2023-06-16 08:36:25

多線程編程數據競爭
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 美日韩视频| 视频在线一区二区 | 国产精品美女在线观看 | 国产精品成人一区 | 一区二区三区视频在线 | 天天影视综合 | 国产精品久久影院 | 亚洲国产精品日韩av不卡在线 | 99精品在线观看 | 一级片aaa | 超碰伊人 | 国产情侣在线看 | 91日韩| 欧美一级二级在线观看 | 久婷婷| 免费在线观看一级毛片 | 国产高清精品一区二区三区 | 91精品国产综合久久婷婷香蕉 | 成人精品在线观看 | 国产美女精品视频免费观看 | 一区二区三区av夏目彩春 | 精品国产18久久久久久二百 | 国产精品视频偷伦精品视频 | 亚洲一区综合 | 日日操夜夜摸 | 丁香婷婷在线视频 | 天天操天天操 | 黄色av免费网站 | 亚洲视频中文字幕 | 久久国产精品久久久久久久久久 | 日韩免费成人av | 亚洲一av | 国产一级片一区二区 | 亚洲日本激情 | 欧美日韩高清一区二区三区 | 一区二区三区久久久 | 中文字幕在线一区 | 欧美激情视频一区二区三区在线播放 | 亚洲欧美视频 | 国产色在线 | 久久亚洲精品国产精品紫薇 |