线程的状态

news2024/10/3 4:36:24

Java中线程的状态是通过枚举类型Thread.State表示的 ,通过打印这些枚举类型,就可以知道java中线程的状态有哪些

public class ThreadState {
    public static void main(String[] args) {
        for (Thread.State state : Thread.State.values()) {
            System.out.println(state);
       }
   }
}

在这里插入图片描述

线程实例通过getState()方法可以知道当前线程所处的状态

NEW状态

public class Demo14 {
    public static void main(String[] args) {
        Thread t = new Thread(()->{
            System.out.println("hello thread");
        });
        //通过这个方法获取指定线程的状态,t调用的就获取t的状态
        System.out.println(t.getState());
        t.start();
    }
}

在这里插入图片描述
线程对象在调用start()方法之前调用getState()方法,此时的状态就是NEW状态。
对象创建好了,但是系统里面还没有对应的线程,也就相当于任务分配了,但是还没去执行

TERMINATED状态

public class Demo14 {
    public static void main(String[] args) throws InterruptedException {
        Thread t = new Thread(()->{
            System.out.println("hello thread");
        });
        t.start();
		Thread.sleep(1000);
        System.out.println(t.getState());
    }
}

在这里插入图片描述

操作系统中的线程已经执行完毕,销毁了,但是Thread对象还在,此时就是TERMINATED状态

NEW状态和TERMINATED状态是Java内部定义的状态,和操作系统中的线程的PCB(线程状态在PCB中存放)没啥关系

RUNNABLE状态

public class Demo14 {
    public static void main(String[] args) throws InterruptedException {
        Thread t = new Thread(()->{
            while (true){}
        });
        t.start();
        Thread.sleep(1000);
        System.out.println(t.getState());
    }
}

在这里插入图片描述

处于这个状态的线程,PCB就会被放到就绪队列中,随时都可以被CPU调度。如果代码中没有进行sleep,也没有进行其他的导致阻塞的操作,代码大概率就是处在RUNNABLE状态

TIMED_ WAITING状态(阻塞状态之一)

public class Demo14 {
    public static void main(String[] args) throws InterruptedException {
        Thread t = new Thread(()->{
            while (true) {
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        });
        t.start();
        Thread.sleep(1000);
        System.out.println(t.getState());
    }
}

代码中调用了sleep,join(超时时间),就会进入该状态,表示当前线程在一定时间内,是阻塞状态,一定时间之后,阻塞状态解除

BLOCKED状态(阻塞状态之一)

public class Demo14 {
    private static Object object = new Object();
    public static void main(String[] args) throws InterruptedException {
        synchronized (object){
            Thread t = new Thread(()->{
                synchronized (object) {
                    System.out.println("hello,thread");
                }
            });

            t.start();
            Thread.sleep(1000);
            System.out.println(t.getState());
        }
    }
}

在这里插入图片描述

当线程正在等待锁时,就会处于BLOCKED状态

WAITING状态(阻塞状态之一)

public class Demo14 {
    public static void main(String[] args) throws InterruptedException {
        Object object = new Object();
        Thread t = new Thread(()->{
            synchronized (object){
                System.out.println("synchronized之前");
                try {
                    object.wait();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println("synchronized之后");
            }
        });

        t.start();
        Thread.sleep(1000);
        System.out.println(t.getState());
    }

在这里插入图片描述

当线程正在等待其他线程唤醒,就会处在WAITING状态

为什么要将阻塞状态分得这么细?

这是非常有好处的!因为在开发过程中经常会遇到程序"卡死"的情况,"卡死"就是一些关键的线程阻塞了,在分析"卡死"原因的时候,第一步就可以先看看当前程序中的各个关键线程所处的状态,通过分析线程所处的状态就能知道程序"开始"的原因

线程状态转换图

在这里插入图片描述

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

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

相关文章

进销存管理系统是什么?有哪些功能?

对于2022年刚开始,但是可以的确的是禽流感在短时期内是不可能返回他们,作为虚拟店面批发商想勇往直前中,就必须要亲吻网络,把销售业务从实体店搬至线上去。 想突破现状,化解虚拟店面批发民营企业的存活问题&#xff0…

ES初使用记录——写入与查询数据

本周接到一个任务:定时统计订单表中的数据,将异常订单挑出来,放入ES中供统计页面从总数点击跳转过去进行列表展示。 一、配置ES 配置maven,注入template Resource private ElasticsearchTemplate elasticsearchTemplate; 二、…

一、OBS概述

1. 概述 obs官网git源码编译 2. 软件能力 输入:文本、图片、窗口、音视频及摄像头等 处理:视频及图片滤镜、音频混音等 输出:rtmp推流、本地录制(mp4)、音视频裸数据(pcm/yuv/rgb)等 3. 模块 a. core核心模块 libobs 加载、管理各个功能…

Ansys Zemax | 大功率激光系统的STOP分析2:如何进行光机械设计准备

大功率激光器广泛用于各种领域当中,例如激光切割、焊接、钻孔等应用中。由于镜头材料的体吸收或表面膜层带来的吸收效应,将导致在光学系统中由于激光能量吸收所产生的影响也显而易见,大功率激光器系统带来的激光能量加热会降低此类光学系统的…

性能测试面试题总结(答案全)

目录 1.什么是负载测试?什么是性能测试? 2.性能测试包含了哪些测试(至少举出3种) 3.简述性能测试的步骤 4.什么时候可以开始执行性能测试? 5.你如何在负载测试模式下执行功能测试? 6.响应时间和吞吐量…

时序数据库 InfluxDB

一、介绍 InfluxDB 是一个时间序列数据库,GO 编写的,旨在处理高写入和查询负载。InfluxDB 旨在用作涉及大量时间戳数据的任何用例的后备存储,包括 DevOps 监控、应用程序指标、物联网传感器数据和实时分析。 特点: 专门为时间序列数据编写的…

格式工厂安装与使用教程

格式工厂支持各种类型视频、音频、图片、word转pdf等多种格式的免费转换,是一款非常优秀的良心软件。 在电脑浏览器中打开下载地址http://www.pcgeshi.com/index.html , 单击"立即下载"按钮即可。 打开下载的文件,等待安装即可。&#xff08…

标记肽Bz-Pro-Phe-Arg-pNA、59188-28-2

血浆激肽释放酶,cruppain和胰蛋白酶的显色底物。编号: 140214 中文名称: 标记肽Bz-PFR-对硝基苯胺 英文名: Bz-Pro-Phe-Arg-pNA CAS号: 59188-28-2 单字母: Bz-PFR-pNA 三字母: Benzoyl-Pro-Phe-Arg-pNA 氨基酸个数: 3 分子式: C33H38O6N8 平均分子量: 642.7 精确分…

python 多线程编程(线程同步和守护线程)

守护线程: 随着主线程的终止而终止,不管当前主线程下有多少子线程没有执行完毕,都会终止。 线程同步: join所完成的工作就是线程同步,即主线程任务结束之后,进入阻塞状态,一直等待其他的子线程执…

深入了解tomcat线程池

1.概述 在正式进入Tomcat线程池之前,小伙伴们可以先回顾一下JDK中的线程池相关特性,对于JDK线程池的总结和源码的解析感兴趣的童鞋,也可参考博主的层层剖析线程池源码的这篇文章,文章主要讲述对线程池的生命周期,核心参…

Vue3 - 不再支持 IE11,到底为什么?

前言 咱们的 Vue2 目前仍然支持 IE11,但是到了 Vue3 这里,直接被抛弃了。 IE 浏览器可以说是早期前端开发的噩梦,现在还充斥的大量兼容 IE 浏览器的代码,你可以在网上看到很多类似的信息。 IE 浏览器下 float 布局错乱。IE 浏览器…

商务呈现之沟通管理-上

一、前言 课程目标及适用人群课程目标:商务/项目的目标达成,任务推动,良好的商务呈现 现实的困扰我们商务活动中是否有遇到以下情况: (1)需求老是变 理解不一致细节不清晰(2)CR很难谈 需求基线不清晰没有利用好"交换"(3)原地打转 事项推进缓慢几个月还在讨…

相似度系列-6:单维度方法:Evaluating Coherence in Dialogue Systems using Entailment

Evaluating Coherence in Dialogue Systems using Entailment coherence 英文中意味着连贯性、条理性。 这篇文章是面向对话应用的,更加关注于对话中上下位的连贯性。1. 直接转换为 NLI问题,premise-hypothesis问题。——2. 数据集是自己构造的。——数…

一文带你了解【抽象类和接口】

1. 抽象类概念 在面向对象的概念中,所有的对象都是通过类来描绘的,但是并不是所有类都是用来描绘对象的。如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。 举个简单的例子 上图中,三角形&#xff0…

构建一个商业智能 BI 分析平台,公司CIO应该重点关注什么?

企业级商业智能 BI 分析平台的构建是一个系统型的工程,涉及业务分析需求的把控、各类数据资源的整合清洗、数据仓库的架构设计、可视化分析报表逻辑设计、IT 部门与业务部门的工作边界划分与配合等等居多环节。 每一个环节的重要性都不容忽视,第一是业务…

(算法设计与分析)第三章动态规划-第二节:动态规划之背包类型问题

文章目录一:01背包问题(1)题目描述(2)解题思路(3)完整代码二:分割等和子集(01背包变形)(1)题目描述(2)解题思路…

Java:Jar包反编译,解压和压缩

1、简述 JAR 文件就是 Java Archive ( Java 档案文件),它是 Java 的一种文档格式。 JAR 文件非常类似 ZIP 文件。准确的说,它就是 ZIP 文件,所以叫它文件包。JAR 文件与 ZIP 文件唯一的区别就是在 JAR 文件的内容中&a…

蓝桥杯必备算法分享——差分算法

AcWing—差分算法 文章目录AcWing---差分算法一、什么是差分?二、差分的作用三、一维差分模板四、二维差分五、二维差分构造方法图示:六、二维差分矩阵模板总结差分算法是前缀和算法的逆运算。两者可以对比着学习: 一、什么是差分&#xff1…

旭日图超越了传统的饼图和圆环图,能表达清晰的多层级和归属关系

“旭日图是什么?用来干什么?” “没听说过旭日图......” “旭日图不就是多层饼图嘛......” 鉴于很多人对旭日图都不太了解,那今天我们就用平台的旭日图为大家讲解。旭日图看似低调简单,却一点都不简单! 旭日图由多…

关于pool.apply_async的学习【参数问题】

一、学习 参考:(1条消息) python pool.apply_async调用 参数为dataset的函数 不执行问题解决_嗯嗲和滴的博客-CSDN博客_pool.apply_async参数 一个参数的情况 一定要加逗号 在只有一个参数要传时 需要写成列表/元组的形式: task_fun.apply_async(args[v…