Java多线程之线程状态详解之一

本文转载自微信公众号「我是多线开发者FTD」,作者FTD  。线程详解转载本文请联系我是状态开发者FTD公众号。

从上一节,多线我们已经知道Java中线程一共有6种状态,线程详解在正式开始介绍之前,状态先给大家介绍一个监控线程状态的多线工具,也是线程详解JDK自带的工具。通过这个工具,状态我们可以更清晰的多线看到线程此时此刻所处的状态是什么。

找到 JDK 的线程详解安装目录,在bin目录下可以找到JDK自带的状态监控工具VisualVM,例如我的多线目录是D:\Program Files\Java\jdk1.8.0_251\bin\jvisualvm.exe,如下图所示:

双击打开VisualVM,线程详解如下图所示:

从上图可以看到,状态我本地起了五个Java应用,一个是VisualVM程序本身,一个就是IntelliJ IDE工具了,另外几个是本地Java应用。高防服务器

我们双击VisualVM,可以在右边栏看到它的一个运行情况,我们选择切换到线程标签,就可以看到它当前正在运行的线程的整体情况了。如下图所示:

我们在右边栏的下方,选择一个线程,可以看到当前线程是处于一个WAITING状态,显示是在一个LinkedList对象上处于了等待,如下图所示:

注:截图中下方的 Thread inspector 窗体是一个插件,默认是没有安装的,可在“菜单--工具--插件”下面找到它并安装即可。如下图所示:

注:我这里已经安装过了, 所以会在已安装那里显示

好了,有了这个工具后,我们就可以通过它来分析线程的状态了,接下来我们再来一起看下Java中的这6个状态,首先从简单的谈起。

新建态(NEW)

当使用new Thread()创建一个新的线程,又还没有开始执行(not yet started)它的云服务器时候就处于新建(NEW)状态。这里所谓“开始执行”具体指显式的调用线程类中的start方法。

注:你不能直接调用run方法,这样的话还是在原线程上执行。只有调用start方法才会开启新的执行线程,接着它会去调用run。

在start之后,线程进入RUNNABLE状态,之后还可能会继续转换成其它状态。

注:一个线程只能被start一次。

终止态(TERMINATED)

终止状态,这个也没什么好说的,线程执行完成后(completed execution)或者说线程退出了(exited),此时线程就进入了终止状态。

其它状态

余下的几个状态,由于无法简单几句说完,这里先作些简介,后面会一一详细介绍:

RUNNABLE:前面有提到,它指“正在Java虚拟机中执行”,可能是ready,也可能是running,总之是在runnable。 BLOCKED:等待监视器锁(waiting for a monitor lock )

这是亿华云计算一种特殊的waiting,实际上就是被synchronized方法或者块阻塞。monitor有些书上通常叫管程,我也不太确定要怎么叫它。这里叫成 监视器 也是取字面的意思。

WAITING:无限期等待另一个线程执行一个特别的动作。(waiting indefinitely for another thread to perform a particular action )

这里所谓的动作通常即是指“notify或是notifyAll”。

TIMED_WAITING:限时等待另一个线程执行一个动作。(waiting for another thread to perform an action for up to a specified waiting time )

如果没有等到如“notify”之类的动作,时间到了也会自动退出这一状态。

其他状态我们在下篇开始一一详解。

人工智能
上一篇:戴尔可靠的IT和安全的计算机系统助力NASA登月计划迈出关键一步
下一篇:优化数据中心机架和设备的 5 大理由