我的编程空间,编程开发者的网络收藏夹
学习永远不晚

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

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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”之类的动作,时间到了也会自动退出这一状态。

 

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

 

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

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

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

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

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

Java多线程之线程状态

关于Java线程的状态,有的人可能会说有4种状态,有的会说有5种,6种,总之各种各样的说法可能都有。造成这种情况的原因是:有很多的书上常常把操作系统进程状态,线程状态与Java线程状态混在一起谈。

Java多线程之锁的状态有哪些

本篇内容介绍了“Java多线程之锁的状态有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!阻塞锁含义:多个线程同时调用一个方法的时候,所有
2023-07-05

详解Java的线程状态

本文主要为大家详细介绍一下Java的线程状态,文中的示例代码讲解详细,对我们学习有一定的帮助,感兴趣的小伙伴可以跟随小编学习一下
2022-11-13

一篇学会Java多线程之线程

我们在学习软件开发时,多线程,高并发是一个必不可少的知识点,也是在面试时必会问到的内容,为了让大家对多线程,高并发编程有个清晰认识,特地组织了一个专栏来专门介绍一下,希望能对大家有一些帮助。

Android 多线程处理之多线程详解

handler.post(r)其实这样并不会新起线程,只是执行的runnable里的run()方法,却没有执行start()方法,所以runnable走的还是UI线程。 1.如果像这样,是可以操作ui,但是run还是走在主线程,见打印出来的
2022-06-06

多线程之死锁详解

死锁是指两个或多个线程在执行过程中,因争夺资源而造成的一种互相等待的现象,如果无外力干涉,这些线程将无法继续执行下去。死锁的产生通常需要满足以下四个条件:1. 互斥条件:每个资源只能被一个线程占用,即一次只能有一个线程访问该资源。2. 请求
2023-09-13

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录