自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

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

開發(fā) 后端
我們已經(jīng)知道Java中線程一共有6種狀態(tài),在正式開始介紹之前,先給大家介紹一個監(jiān)控線程狀態(tài)的工具,也是JDK自帶的工具。通過這個工具,我們可以更清晰的看到線程此時此刻所處的狀態(tài)是什么。

[[442479]]

本文轉(zhuǎn)載自微信公眾號「我是開發(fā)者FTD」,作者FTD  。轉(zhuǎn)載本文請聯(lián)系我是開發(fā)者FTD公眾號。

從上一節(jié),我們已經(jīng)知道Java中線程一共有6種狀態(tài),在正式開始介紹之前,先給大家介紹一個監(jiān)控線程狀態(tài)的工具,也是JDK自帶的工具。通過這個工具,我們可以更清晰的看到線程此時此刻所處的狀態(tài)是什么。

找到 JDK 的安裝目錄,在bin目錄下可以找到JDK自帶的監(jiān)控工具VisualVM,例如我的目錄是D:\Program Files\Java\jdk1.8.0_251\bin\jvisualvm.exe,如下圖所示:

雙擊打開VisualVM,如下圖所示:

從上圖可以看到,我本地起了五個Java應(yīng)用,一個是VisualVM程序本身,一個就是IntelliJ IDE工具了,另外幾個是本地Java應(yīng)用。

我們雙擊VisualVM,可以在右邊欄看到它的一個運行情況,我們選擇切換到線程標(biāo)簽,就可以看到它當(dāng)前正在運行的線程的整體情況了。如下圖所示:

我們在右邊欄的下方,選擇一個線程,可以看到當(dāng)前線程是處于一個WAITING狀態(tài),顯示是在一個LinkedList對象上處于了等待,如下圖所示:

注:截圖中下方的 Thread inspector 窗體是一個插件,默認(rèn)是沒有安裝的,可在“菜單--工具--插件”下面找到它并安裝即可。如下圖所示:

注:我這里已經(jīng)安裝過了, 所以會在已安裝那里顯示

好了,有了這個工具后,我們就可以通過它來分析線程的狀態(tài)了,接下來我們再來一起看下Java中的這6個狀態(tài),首先從簡單的談起。

新建態(tài)(NEW)

當(dāng)使用new Thread()創(chuàng)建一個新的線程,又還沒有開始執(zhí)行(not yet started)它的時候就處于新建(NEW)狀態(tài)。這里所謂“開始執(zhí)行”具體指顯式的調(diào)用線程類中的start方法。

注:你不能直接調(diào)用run方法,這樣的話還是在原線程上執(zhí)行。只有調(diào)用start方法才會開啟新的執(zhí)行線程,接著它會去調(diào)用run。

在start之后,線程進(jìn)入RUNNABLE狀態(tài),之后還可能會繼續(xù)轉(zhuǎn)換成其它狀態(tài)。

注:一個線程只能被start一次。

終止態(tài)(TERMINATED)

終止?fàn)顟B(tài),這個也沒什么好說的,線程執(zhí)行完成后(completed execution)或者說線程退出了(exited),此時線程就進(jìn)入了終止?fàn)顟B(tài)。

其它狀態(tài)

余下的幾個狀態(tài),由于無法簡單幾句說完,這里先作些簡介,后面會一一詳細(xì)介紹:

  • RUNNABLE:前面有提到,它指“正在Java虛擬機中執(zhí)行”,可能是ready,也可能是running,總之是在runnable。
  • BLOCKED:等待監(jiān)視器鎖(waiting for a monitor lock )

這是一種特殊的waiting,實際上就是被synchronized方法或者塊阻塞。monitor有些書上通常叫管程,我也不太確定要怎么叫它。這里叫成 監(jiān)視器 也是取字面的意思。

  • WAITING:無限期等待另一個線程執(zhí)行一個特別的動作。(waiting indefinitely for another thread to perform a particular action )

這里所謂的動作通常即是指“notify或是notifyAll”。

  • TIMED_WAITING:限時等待另一個線程執(zhí)行一個動作。(waiting for another thread to perform an action for up to a specified waiting time )

如果沒有等到如“notify”之類的動作,時間到了也會自動退出這一狀態(tài)。

 

其他狀態(tài)我們在下篇開始一一詳解。

 

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

2021-12-26 18:22:30

Java線程多線程

2021-12-14 08:28:08

Java多線程線程

2017-05-27 20:59:30

Java多線程synchronize

2021-04-26 06:54:15

Redis多線程單線程

2010-03-16 17:16:38

Java多線程

2010-01-21 11:25:44

linux多線程線程資源

2011-06-22 16:08:40

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

2021-02-25 15:58:46

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

2021-03-05 07:38:52

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

2011-06-22 16:02:37

Qt 多線程 重入

2009-03-12 10:52:43

Java線程多線程

2017-05-08 11:46:15

Java多線程

2009-06-29 17:49:47

Java多線程

2009-06-11 10:22:18

Java多線程

2017-05-31 14:03:07

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

2009-06-17 11:23:00

Java多線程

2013-06-07 16:30:08

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

2022-05-20 10:20:17

Spring事務(wù)MyBatis

2013-07-16 10:12:14

iOS多線程多線程概念多線程入門

2021-03-28 09:12:58

多線程死鎖技術(shù)熱點
點贊
收藏

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