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

Java多線程之線程狀態(tài)

開(kāi)發(fā) 后端
關(guān)于Java線程的狀態(tài),有的人可能會(huì)說(shuō)有4種狀態(tài),有的會(huì)說(shuō)有5種,6種,總之各種各樣的說(shuō)法可能都有。造成這種情況的原因是:有很多的書(shū)上常常把操作系統(tǒng)進(jìn)程狀態(tài),線程狀態(tài)與Java線程狀態(tài)混在一起談。

[[442096]]

關(guān)于Java線程的狀態(tài),有的人可能會(huì)說(shuō)有4種狀態(tài),有的會(huì)說(shuō)有5種,6種,總之各種各樣的說(shuō)法可能都有。造成這種情況的原因是:有很多的書(shū)上常常把操作系統(tǒng)進(jìn)程狀態(tài),線程狀態(tài)與Java線程狀態(tài)混在一起談。下面這個(gè)圖相信大家在講多線程的文章中都見(jiàn)到過(guò)(或類(lèi)似):

這些其實(shí)是操作系統(tǒng)上的書(shū)上常會(huì)提到的5種 進(jìn)程(process) 狀態(tài):new,ready,running,waiting,terminated。

其實(shí)最簡(jiǎn)單的就是直接查看Java源碼,就知道Java中線程到底定義了幾種狀態(tài)。如果我們查看JDK源碼的話,就會(huì)發(fā)現(xiàn)Java語(yǔ)言中定義的線程狀態(tài)是不同于操作系統(tǒng)的,我們可以在Thread.State源碼中的注釋中看到,它說(shuō)得很清楚:

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

也就是說(shuō)Java語(yǔ)言中定義的這些狀態(tài)都是指虛擬機(jī)狀態(tài),它不反映任何操作系統(tǒng)的線程狀態(tài)。

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

一個(gè) Java 線程它所對(duì)應(yīng)的操作系統(tǒng)內(nèi)核線程中的狀態(tài)可能有Running又有Ready,但在Java虛擬機(jī)層面則統(tǒng)一映射成了RUNNABLE 狀態(tài)。如果Java中覺(jué)得沒(méi)必要去區(qū)分這些狀態(tài),我們也就沒(méi)有必要去糾結(jié)這些了。

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

又或者把TIMED_WAITING 狀態(tài)當(dāng)作不存在,在很多文章中從來(lái)不提有這個(gè)狀態(tài),顯然,這種做法又是受到傳統(tǒng)進(jìn)程狀態(tài)劃分的影響。盡管它與WAITING很像,我們最好按著 Thread.State 中的定義來(lái),不要自己隨意發(fā)揮。

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

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

下面我們就以 JDK1.8 源碼中為標(biāo)準(zhǔn),分別給大家介紹一下Java線程的這6種狀態(tài),下面我們先來(lái)看一下 JDK 中對(duì)于線程狀態(tài)的定義都有哪些。

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

在 Thread 類(lèi)的一個(gè)內(nèi)部枚舉類(lèi) Thread.State 中明確地定義這6種狀態(tài),如下圖所示:

狀態(tài)含義:

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

在程序運(yùn)行的某個(gè)給定時(shí)間點(diǎn)上,一個(gè)Java線程只能處于這6種狀態(tài)中的一種。

通過(guò)上面的介紹,相信大家就可以很清晰的、明確的知道Java線程狀態(tài)到底有幾種狀態(tài),又分別都有哪些狀態(tài)了,雖然可能對(duì)各個(gè)線程狀態(tài)的詳細(xì)含義還不是特別了解,別著急,后面我們會(huì)逐一介紹,請(qǐng)大家多多關(guān)注后續(xù)文章。

參考:

 

關(guān)于Java的線程狀態(tài)

 

責(zé)任編輯:武曉燕 來(lái)源: 我是開(kāi)發(fā)者FTD
相關(guān)推薦

2021-12-28 09:10:55

Java線程狀態(tài)

2021-12-14 08:28:08

Java多線程線程

2010-01-21 11:25:44

linux多線程線程資源

2010-03-16 17:16:38

Java多線程

2011-06-22 16:08:40

Qt 多線程 事件循環(huán)

2021-02-25 15:58:46

C++線程編程開(kāi)發(fā)技術(shù)

2021-03-05 07:38:52

C++線程編程開(kāi)發(fā)技術(shù)

2011-06-22 16:02:37

Qt 多線程 重入

2017-05-27 20:59:30

Java多線程synchronize

2009-03-12 10:52:43

Java線程多線程

2009-06-29 17:49:47

Java多線程

2013-06-07 16:30:08

iOS多線程iOS開(kāi)發(fā)NSThread

2017-05-08 11:46:15

Java多線程

2017-05-31 14:03:07

Java多線程內(nèi)置鎖與顯示鎖

2009-06-17 11:23:00

Java多線程

2010-03-15 17:56:23

Java多線程

2012-02-14 12:31:27

Java

2011-06-13 10:41:17

JAVA

2023-06-16 08:36:25

多線程編程數(shù)據(jù)競(jìng)爭(zhēng)

2020-11-12 18:08:05

JavaLinux多線程
點(diǎn)贊
收藏

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