线程的状态(java)

news2024/11/13 6:56:01

“苦?     何止是苦~~~~~”

本期内容来分享一下线程状态相关的知识哦!!!

对于进程来说,进程是有两种状态的。

一种是就绪状态:正在CPU上执行,或者随时可以去CPU上执行的。

另一种是阻塞状态:暂时不能去CPU上执行的。

那么对于线程来说,线程也是有状态的,而且更加详细的分了六中状态,那么接下来,我们一起来了分别了解这六中状态吧。

状态一:新建(New)

对于NEW状态来说,虽然当前创建出了一个thread对象,但是内核的线程还没有(还没有调用start方法),没有在内核中真正创建出thread对象的(只有在调用start()方法之后,内核才会真正创建出线程)。

状态二:可运行(RUNNABLE)

该状态表示线程正在CPU上运行,或者随时可以去CPU上运行。

状态三:阻塞(Blocked)

该状态是由线程之间由于锁竞争锁引起的阻塞状态。

public class Demo3 {
    private static Object locker1 = new Object();
    public static void main(String[] args) throws InterruptedException {
        Thread t1 = new Thread(() -> {
            synchronized(locker1) {
                while(true) {

                }
            }
        },"t1");

        Thread t2 = new Thread(() -> {
            synchronized (locker1) {
                System.out.println("------");
            }
        },"t2");

        t1.start();
        //确保t1执行
        sleep(100);
        t2.start();

        
    }
}

 这个我们可以借助idk下的一个工具进行查看。首先先找到jdk所在的路径,然后点到bin目录下面去,然后找到jconsole.exe,运行jconsole,(在运行jconsole时,确保你的程序在运行着),然后选择本地进程里面的,你所运行着的代码文件名。之后点击连接,然后点击不安全连接,之后再点到线程那一栏,找到你的线程的名称,点进去就可以看见它的信息了。

 

 

那么上面我们看到,线程t2是一个BLOCKED状态,t1线程正在运行着,就是RUNNABLE。

那么这个工具也是我们之后如果遇到线程之类的一些问题,可以利用这个工具来查看线程的状态,这样便于我们检查或者排除一些问题。

 状态四:等待(WAITING)

没有超时时间的等待,由join/wait等引起的一种状态。

状态五: 定时等待(TIME_WAITING)

有超时时间的等待,比如sleep或者join(带参数版本)

状态六:终止(TERMINATED)

当前Thread对象虽然还在,但是内核的线程已经销毁了(线程已经结束了)

 下面假设一堆人去银行办理业务为例,有一个更清晰的了解:

相信大家看见这个图之后,有了多一些了解,了解线程的这六种状态,对于后续的多线程编程会有一定帮助的。

"感谢你阅读这篇文章!如果你觉得这篇文章对你有帮助,请分享给你的朋友。同时,欢迎在下方留言,告诉我你的想法或提出任何问题。"

好了,本期节目就到这里了,我们下期节目不见不散。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2119498.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

cesium地图高程数据DEM使用及转换

一.DEM高程图的下载,我是在地理空间数据云 (gscloud.cn)这个地方下载的,是免费的,可以下载30M和90M的高程数据。具体方式是进入“高级检索”,选择图源类型,需要下载的区域名称等,最后点击“检索”即可出现图…

mysql_redo_log_buffer

Redo Log MySQL 的 InnoDB 存储引擎使用 Redo Log 记录系统中每个事务的修改,从而在系统崩溃重启时能够把系统恢复到崩溃时的状态。因此,Redo Log 用于保证事务的持久性,即一旦某个事务成功提交,即使系统发生了崩溃,那…

C#开发移动应用系列(4.调用系统应用,以及第三方应用(调用与被调用))

写完这篇..本系列基本也就结束了. 看完这些,基本做个Webapp应该是毫无问题的了..其实略微有点伤感,Xamarin确实是好东西.. 奈何,生不逢时..等完善了. 开源了..社区化了..APP应用(指的是安装包类客户端)已经逐渐没落了.. 算了,话不多说.开始正文 确定一下本篇的学习目标: 1.…

【MySQL】—— MySQL命令行客户端介绍

目录 (一)mysql客户端简介 (二)mysql客户端选项 2.1 指定选项的方式 2.2 mysql 客户端命令常用选项 2.3 在命令行中使用选项 (三)选项(配置)文件 3.1 使用方法 3.2 选项文件位置及加载顺序 3.2.1…

mysql——关于表的增删改查(CRUD)

目录 比较运算符和逻辑运算符图 一、增加(Create) 1、全列插入 2、指定列插入 二、查询(Retrieve) 1、全列查询 2、指定列查询 3、别名(as) 4、表达式查询 5、去重(distinct) 6、…

全网最适合入门的面向对象编程教程:46 Python函数方法与接口-函数与事件驱动框架

全网最适合入门的面向对象编程教程:46 Python 函数方法与接口-函数与事件驱动框架 摘要: 函数是 Python 中的一等公民,是一种可重用的代码块,用于封装特定的逻辑;事件驱动框架是一种编程模式,它将程序的控制流转移给外部事件,如用…

Simulink库模块作用及简单应用(一)

01--Data Store Memory模块 数据存储模块一般是和数据写入还有数据访问一同搭配使用的 可以从帮助文档看到该模型如下的关键使用信息: Data Store Memory 模块定义并初始化一个命名的共享数据存储,即一个内存区域,供指定相同数据存储名称的…

客户端负载均衡Ribbon 小实例

文章目录 一,概述二,实现过程三,项目源码1. 源码放送:2. 部署方式 四,功能演示五,其他 一,概述 一般来说,提到负载均衡,大家一般很容易想到浏览器 -> NGINX -> 反…

Java 每日一刊(第一期):Java 的历史

文章目录 Java 的起源与诞生Java 的早期发展(1995-2000)Java 的转型与扩展(2000-2010)Oracle 时代的 Java(2010-至今)本期小知识 Java 的起源与诞生 Java 的历史可以追溯到 20 世纪 90 年代,由 …

【数据结构(初阶)】——二叉树

【数据结构】——二叉树 文章目录 【数据结构】——二叉树前言1. 树的概念及结构1.1 树的概念1.2 树的结构 2. 二叉树的概念及结构2.1 二叉树的概念2.2 二叉树的结构2.3 二叉树的性质 3. 二叉树顺序结构及概念3.1 二叉树的顺序结构3.2 堆的概念及结构3.3 堆的实现3.3.1 堆的基本…

【C++ Qt day9】

2、将day1做的登录界面升级优化【资源文件的添加】 3、 使用手动连接,将登录框中的取消按钮使用第2种方式的连接到自定义的槽函数中,在自定义的槽函数中调用关闭函数 将登录按钮使用qt4版本的连接到自定义的槽函数中,在槽函数中判断ui界面上…

黑马点评16——多级缓存-JVM进程缓存

文章目录 什么是多级缓存导入商品案例初识Caffeine实现进程缓存 什么是多级缓存 但是现在的nginx的压力太大了,所以nginx也要部署成集群 当然我们的redis、tomcat都可以部署成集群 导入商品案例 我们在docker中开启了一个mysql的数据库,里面配置了一个…

C和指针:高级指针话题

进一步探讨指向指针的指针 int i; int *pi; int **ppi; 这些声明在内存中创建了下列变量。如果它们是自动变量,无法猜测它们的初始值。 二级指针指向一级指针 ppiπ *ppi&i; ia; *pia; **ppia; 为什么要使用指针? 因为函数传参使用值传递不会…

[C#学习笔记]接口的特性与用法

视频地址&#xff1a;一期视频看透C#接口的全部特性及用法_哔哩哔哩_bilibili 强烈推荐学习C#和WPF的朋友关注此UP&#xff0c;知识点巨多&#xff0c;讲解透彻&#xff01; 一、总览 public interface IOverall {/// <summary>/// 最普通的方法/// </summary>v…

[数据集][目标检测]打电话检测数据集VOC+YOLO格式8985张1类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;8985 标注数量(xml文件个数)&#xff1a;8985 标注数量(txt文件个数)&#xff1a;8985 标注…

【C++】C++入门基础,详细介绍命名空间,缺省参数,函数重载,引用,内联函数等

目录 1. 命名空间 1.1 使用命名空间的目的 1.2 命名空间定义 1.3 命名空间使用 2. 缺省参数 2.1 缺省参数概念 2.2 缺省参数分类 2.3 实际案例 2.4 注意事项 3. 函数重载 3.1 函数重载概念 3.2 函数重载原理 4. 引用 4.1 引用的概念 4.2 引用的特性 4.3 使用…

JavaScript案例---求质数

n等于19&#xff0c;是质数 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"wid…

OpenAI Gymnasium, are there any libraries with algorithms supporting it?

题意&#xff1a;对于OpenAI Gym&#xff0c;是否有支持它的算法库&#xff1f; 问题背景&#xff1a; OpenAI has released a new library called Gymnasium which is supposed to replace the Gym library. There are many libraries with implamentations of RL algorithms…

机械学习—零基础学习日志(Python做数据分析02)

现在开始使用Python尝试做数据分析。具体参考的网址链接放在了文章末尾。 引言 我通过学习《利用Python进行数据分析》这本书来尝试使用Python做数据分析。书里让下载&#xff0c;anaconda&#xff0c;使用Jupyter来写代码&#xff0c;只是下载一个anaconda的确有点费时间&am…

RabbitMQ 04 集群,用于提高系统性能

01.背景 02.单个节点的MQ会持久化的记录什么数据 03.集群情况下的MQ会持久化的记录什么数据 04.集群中的队列 单个节点的队列&#xff1a; 集群的队列&#xff1a; 05. 两个原因&#xff1a; 这样做带来的好处&#xff1a; 05.集群的交换机 交换机的本质 交换机在集…