java线程状态介绍

01faf8404f6a4ed09fc4abe50641a558.gif

 

1.新建(New): 线程对象已创建,但还没有调用 start() 方法。

2.可运行(Runnable): 线程已启动,处于就绪状态,等待 JVM 的线程调度器分配CPU时间。

3.阻塞(Blocked): 线程正在等待监视器锁定以进入同步块或方法。

4.等待(Waiting): 线程在无限期等待另一个线程执行特定操作,例如调用 wait() 方法。

5.终止(Terminated): 线程已完成执行。

可以通过 Thread 类的 getState() 方法获取线程的状态,该方法返回一个 Thread.State 枚举类型的值,代表线程的当前状态。下面是如何使用 getState() 方法的例子:

import java.lang.Thread.State;

import java.lang.management.ManagementFactory;

 

public class ThreadStatusExample extends Thread {

    public void run() {

        // 线程执行的代码

    }

 

    public static void main(String[] args) {

        ThreadStatusExample t = new ThreadStatusExample();

        System.out.println(t.getState()); // 新建

 

        t.start();

        while (!t.getState().equals(State.RUNNABLE)) {

            try {

                Thread.sleep(10);

            } catch (InterruptedException e) {

                e.printStackTrace();

            }

        }

        System.out.println(t.getState()); // 可运行或阻塞

    }

}

 

在这个例子中,我们创建了一个 ThreadStatusExample 对象 t 并打印了它的状态。在没有调用 start() 方法前,其状态是 NEW。然后我们启动线程 t,并在循环中检查它的状态,直到它变为 RUNNABLE 或者 BLOCKED。

需要注意的是,由于JVM和操作系统调度的原因,线程的实际状态可能会有所变化,而且 getState() 方法只能给出一个快照,它并不能保证在任意时刻都是绝对准确的。此外,线程状态的检查应该小心进行,以避免因状态转换而导致的竞态条件。

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

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

相关文章

利用博弈论改进大模型性能:MIT最新研究解读

引言 在人工智能和大模型的发展过程中,我们常常遇到一个有趣的现象:同一个问题在不同形式下可能得到不同的答案。这种不一致性不仅降低了大模型的可信度,也限制了其在实际应用中的效果。为了应对这一问题,来自MIT的研究人员提出了…

Element快速入门

Vue组件库Element 1 Element介绍 vue是侧重于VM开发的,主要用于数据绑定到视图的,ElementUI就是一款侧重于V开发的前端框架,主要用于开发美观的页面的。 Element:是饿了么公司前端开发团队提供的一套基于 Vue 的网站组件库&…

深入理解 Go 语言中的字符串不可变性与底层实现

文章目录 前言1 字符串类型的数据结构组成2 为什么要这么设计数据结构?3 为什么说字符串类型不可修改?4 如何实现字符串的修改?5 为什么字符串修改的字面量用单引号?6 如何判断字符串的修改新建了一个字符串?7 字符串的…

c基础 - 输入输出

目录 一.scanf() 和 printf() 函数 1.printf 2.scanf 二 . getchar() & putchar() 函数 1.int getchar(void) 2.int putchar(int c) 三. gets() & puts() 函数 一.scanf() 和 printf() 函数 #include <stdio.h> 需要引入头文件,stdio.h 1.printf print…

M-G364PD惯性测量单元:相机及微小层面的革命性应用

在现代科技飞速发展的今天&#xff0c;精准控制和精确测量是众多高端设备实现卓越性能的关键。爱普生推出的M-G364PD惯性测量单元&#xff08;IMU&#xff09;&#xff0c;因其卓越的性能和微小尺寸&#xff0c;成为相机以及其他微小层面应用的理想选择&#xff0c;为科技创新提…

存储 Bean 对象更加简单的方式

前置操作 如果是在 spring-config 中添加 bean 标签来注册内容&#xff0c;每个类都要弄一次就显得麻烦和臃肿了&#xff0c;对于 new 操作而言就没有什么优势了。因此 spring 就引入了注解操作来实现对 Bean 对象的存储。 配置扫描路径 想要将对象成功的存储到 Spring 中&…

python onnxruntime DLL load failed: 找不到指定的模块

在安装ddddocr 报错&#xff1a;ImportError: DLL load failed while importing onnxruntime_pybind11_state: 找不到指定的模块 试了降到onnxruntime 1.8.0版本&#xff0c;升级pip再重装ddddocr均无效。 这个错误通常是因为缺少onnxruntime_pybind11_state.dll文件或者没有…

Liunx中使用他人身份来执行命令或新建文件

前言 在一些情况下。我们想要借助某个用户的身份来执行命令或者新建文件&#xff0c; 比如某个用户的bash是 nologin 或者 false。 该怎么做呢&#xff1f;&#xff1f; 答&#xff1a;使用 sudo -u 即可。 例如&#xff1a; sudo -u ygz1 touch temp1.txt哈哈哈&#xff0…

android gradle8.3 发布插件踩过的坑

之前写过gradle6.x和gradle7.x的插件&#xff0c;会有一些改动&#xff0c;到8.x我发现又有一些变化&#xff0c;记录一下&#xff0c;防止后边再遇到相同的情况 下边是插件的gradle文件配置 plugins {id("java-gradle-plugin") //会自动引入java-library、gradleAp…

摄影后期照片编辑工具:LrC2024 for Mac/win 中文激活版

LrC2024&#xff08;Lightroom Classic 2024&#xff09;是 Adobe 公司推出的一款专业级别的照片编辑和管理软件。它是 Lightroom Classic CC 的升级版&#xff0c;具有更多的功能和改进。 这款软件主要用于数字摄影师和摄影爱好者处理、编辑和管理他们的照片。它提供了一套强大…

【网络安全的神秘世界】在win11搭建pikachu靶场

&#x1f31d;博客主页&#xff1a;泥菩萨 &#x1f496;专栏&#xff1a;Linux探索之旅 | 网络安全的神秘世界 | 专接本 下载pikachu压缩包 https://github.com/zhuifengshaonianhanlu/pikachu 下载好的pikachu放在phpstudy_pro/www目录下 创建pikachu数据库 打开phpstudy软件…

独立开发的轻量级简洁开源论坛BBS PHP源码

最新的轻量级开源论坛php源码发布啦&#xff01;这是一款独立开发的论坛系统&#xff0c;可以帮助你快速地开发出你想要的网站。 如果你是PHP初学者&#xff0c;这款论坛系统非常适合你入门学习。不过&#xff0c;需要注意的是&#xff0c;由于它并没有进行商业化改造&#xf…

docker一键部署EFK系统(elasticsearch filebeat kibana metricbeat es-head)

EFK日志系统搭建 EFK日志系统介绍功能需求搭建elasticsearch集群规划前提部署核对证书及权限 EFK日志系统介绍 Elasticsearch 是一个实时的、分布式的可扩展的搜索引擎&#xff0c;允许进行全文、结构化搜索&#xff0c;它通常用于索引和搜索大量日志数据&#xff0c;也可用于…

【ARM-Linux篇】u-boot编译

一、u-boot简介 uboot是一种通用的引导加载程序&#xff0c;它可以用于多种嵌入式系统&#xff0c;支持多种操作系统&#xff0c;如Linux, Android,NetBSD等。uboot的主要作用是将操作系统内核从存储设备&#xff08;如Flash, SD卡等&#xff09;加载到内存中&#xff0c;并执…

一个令人惊艳的开源技术盛宴,来了!

公众号关注 “GitHubDaily” 设为 “星标”&#xff0c;每天带你逛 GitHub&#xff01; 在 GitHub 上&#xff0c;每天都会诞生各种实用的开源项目&#xff0c;这些项目在不同行业与领域得到充分应用&#xff0c;推动技术发展&#xff0c;让普通人也能够真切感受到科技魅力。 而…

使用 EBS 和构建数据库服务器并使用应用程序与数据库交互

实验 4&#xff1a;使用 EBS 实验概览 本实验着重介绍 Amazon Elastic Block Store (Amazon EBS)&#xff0c;这是一种适用于 Amazon EC2 实例的重要底层存储机制。在本实验中&#xff0c;您将学习如何创建 Amazon EBS 卷、将其附加到实例、向卷应用文件系统&#xff0c;然后进…

ES 生命周期管理

一 .概念 ILM定义了四个生命周期阶段&#xff1a;Hot&#xff1a;正在积极地更新和查询索引。Warm&#xff1a;不再更新索引&#xff0c;但仍在查询。cold&#xff1a;不再更新索引&#xff0c;很少查询。信息仍然需要可搜索&#xff0c;但是如果这些查询速度较慢也可以。Dele…

TOPIAM数字身份管控平台前端技术实践

一、引言 随着企业信息化程度的不断加深&#xff0c;内部办公系统、业务系统及三方SaaS系统的集成与整合成为企业面临的重要挑战之一。特别是如何有效管理员工账号、权限、身份认证以及应用访问&#xff0c;成为保障企业信息安全、提升用户体验的关键。TOPIAM数字身份管控平台…

VSCode Prettier - Code formatter 代码格式化

格式化代码是一个挑战&#xff0c;但现代开发工具可以自动保持团队代码库的一致性。 在本文中&#xff0c;您将设置 Prettier 以自动格式化 Visual Studio Code&#xff08;也称为 VS Code&#xff09;中的代码。 1. 安装插件 2. 定义代码风格 在项目根目录下创建一个pretti…

【NPS】微软NPS配置802.1x,验证域账号,动态分配VLAN(有线网络篇)

上两篇中介绍了如何配置NPS和在WLC上如何配置802.1X来实现验证域账号和动态分配VLAN&#xff0c;802.1x协议作为一种成熟的身份验证框架&#xff0c;不仅适用于无线网络&#xff0c;同样也适用于有线网络环境。这里我们将介绍如何在有线网络中部署802.1x认证&#xff0c;以验证…