当前位置: 首页 > news >正文

详细讲讲Java线程的状态

TERMINATED状态 是什么状态?

在Java线程的生命周期中,TERMINATED状态是线程的最终状态,表示线程已经执行完毕并已经退出。当一个线程完成了它的工作,或者因为异常而提前结束时,它会进入TERMINATED状态。此时线程不再执行任何代码,并且无法回到任何其他状态。

线程在进入TERMINATED状态之前,可能会先进入WAITING、TIMED_WAITING或BLOCKED状态,具体取决于它在结束之前是否被阻塞或处于等待状态。

在TERMINATED状态下,线程的所有资源都被释放,包括内存和CPU时间等资源。当线程进入此状态时,线程对象将被垃圾回收器回收,因为它已经没有任何可用的引用指向它。

BLOCKED 是什么状态?

在Java线程的生命周期中,BLOCKED状态表示线程正在等待锁定资源,以便进入同步代码块或方法进行访问。当线程尝试访问另一个线程已经持有锁的同步代码块或方法时,它将进入BLOCKED状态。

例如,当一个线程进入synchronized方法或代码块时,它将持有该对象的锁。如果另一个线程尝试访问相同的synchronized方法或代码块,它将进入BLOCKED状态,直到第一个线程释放锁。

在BLOCKED状态下,线程是活动的,它在等待锁资源变得可用时将被唤醒并重新进入RUNNABLE状态,以继续执行代码。

BLOCKED状态是一种暂时性状态,因为当线程获得了锁资源时,它将离开BLOCKED状态并进入RUNNABLE状态。因此,在Java中,BLOCKED状态通常被视为RUNNABLE状态的一种子状态。

TIMED_WAITING 是什么状态?

在Java线程的生命周期中,TIMED_WAITING状态表示线程正在等待某个特定时间内的某个事件发生,例如休眠(sleep)、等待(wait)、加锁(lock)等待超时、定时器(timer)等待、IO等待等操作。

当一个线程在调用Thread.sleep()、Object.wait()、Lock.tryLock(long timeout, TimeUnit unit)等方法时,线程将进入TIMED_WAITING状态,并在指定的时间内等待相应的事件发生。

例如,线程可以在一个Object的监视器上调用wait(long timeout)方法并指定等待时间,以等待另一个线程调用notify()或notifyAll()方法。

在TIMED_WAITING状态下,线程是暂时阻塞的,但仍然是活动的,因为它等待某个事件的发生。当事件发生或指定时间到期时,线程将离开TIMED_WAITING状态,并进入RUNNABLE状态,以便继续执行代码。

值得注意的是,与WAITING状态不同,TIMED_WAITING状态是有时间限制的,如果等待的时间超过了指定的时间,线程将自动离开TIMED_WAITING状态,进入RUNNABLE状态,以继续执行代码。

NEW是什么状态?

在Java线程的生命周期中,NEW状态表示线程已经被创建,但还没有启动(start)。在这种状态下,线程对象已经被创建,但它尚未开始执行任何代码。

当创建线程对象并调用start()方法时,线程将从NEW状态转换到RUNNABLE状态,并开始在自己的线程栈上执行代码。

需要注意的是,NEW状态只是短暂的,线程创建之后很快就会进入RUNNABLE状态。如果线程创建后很长时间仍然停留在NEW状态,可能是因为线程没有被正确地启动或因为线程启动时发生了异常。

RUNNABLE是什么状态?

在Java线程的生命周期中,RUNNABLE状态表示线程已经被启动并正在等待CPU时间片来执行代码。在这种状态下,线程正在运行或准备运行,但可能被挂起以让其他线程运行。

在RUNNABLE状态下,线程已经准备好执行代码,并且可以被操作系统调度为运行状态。当线程被调度并获得CPU时间片时,它将进入运行状态,并在自己的线程栈上执行代码。

值得注意的是,在RUNNABLE状态下,线程可能正在等待某些资源,例如锁、I/O操作等,因此可能会被挂起。如果线程因为某些原因被阻塞,它将进入BLOCKED或WAITING或TIMED_WAITING状态。一旦线程获得了所需的资源或等待的事件发生,它将重新进入RUNNABLE状态,等待CPU时间片来执行代码。

表示当前线程正在运⾏中。处于RUNNABLE状态的线程在Java虚拟机中运⾏,也有可能在等待其他系统资源(⽐如I/O)。

Java线程的RUNNABLE状态其实是包括了传统操作系统线程的ready和running两个状态的。

总之,RUNNABLE状态是Java线程生命周期中最重要和最常见的状态之一,表示线程已经准备好执行代码并正在等待执行机会。

WAITING 是什么状态?

在Java线程的生命周期中,WAITING状态表示线程正在等待某个特定的事件发生,例如等待另一个线程执行完毕或等待某个资源可用。在WAITING状态下,线程是暂时阻塞的,但仍然是活动的,因为它在等待某个事件的发生。

在WAITING状态下,线程可能会调用一些等待方法,例如Object.wait()或Thread.join()等,以等待其他线程的信号或事件发生。当这些方法被调用时,线程将进入WAITING状态,并一直等待,直到其他线程发出相应的信号或事件发生。

需要注意的是,与TIMED_WAITING状态不同,WAITING状态是没有时间限制的,线程将一直等待直到事件发生。如果没有其他线程发出相应的信号,线程将一直停留在WAITING状态,直到应用程序被终止或线程被中断(interrupt)。

在某些情况下,WAITING状态下的线程可能会被操作系统挂起,因为它并没有占用CPU时间片,因此系统可以将CPU时间片分配给其他线程。当等待的事件发生时,线程将被重新调度,并进入RUNNABLE状态,以便继续执行代码。

相关文章:

详细讲讲Java线程的状态

TERMINATED状态 是什么状态? 在Java线程的生命周期中,TERMINATED状态是线程的最终状态,表示线程已经执行完毕并已经退出。当一个线程完成了它的工作,或者因为异常而提前结束时,它会进入TERMINATED状态。此时线程不再执…...

企业月结快递管理教程

回答这个问题的之前,我们先来看看什么是企业月结快递管理...... 经济的发展,技术的进步,电商行业的加持之下,这几年快递行业的发展有目共睹。不仅是我们的生活离不开快递,很多企业的运作多多少少也离不开“快递”二字…...

cm cdp告警 Swap Memory Usage Suppress...

原因:服务器没有关swap,服务使用了swap 在cdp集群中,一般要关掉swap,如果没有关。可以使用 下面命令设置程序尽可能不使用swap,使用swap会影响性能 修改后,重启服务就不会使用swap了 sysctl -w vm.swappi…...

3.8——友元

类的主要特点之一是信息隐藏和封装,即类的私有成员和保护成员只能在定义的范围内使用,也就是说私有成员和保护成员只能通过类的成员函数来访问。但是,有时候我们在类外也需要访问私有成员数据或保护成员数据怎么办。这时我们就要通过友元函数…...

C++ OOP Feature Conclusion (更新中)

目录 1.类与对象 1.1 基本概念(继承、封装、抽象、多态) 1.2类的声明 1.3成员函数(对象所占空间取决于数据成员,和成员函数无关) 1.4数据成员(不能在类中初始化) 1.5构造与析构函数&#xff08…...

【HTTP】Cookie、Session、Token以及Cookie优化

Cookie、Session、TokenCookie优化Cookie、Session、Token 在开始介绍Cookie安全之前,我们先来了解一下实现授权的方式。 在登录功能中,为了记住登录成功后的信息,在客户端,我们通常会使用Cookie来记录,但是&#xf…...

npm之报错:Error: EACCES: permission denied, access ‘/usr/local/lib/node_modules‘

1.报错 363 error [Error: EACCES: permission denied, rename ‘/usr/local/lib/node_modules/tldr’ -> ‘/usr/local/lib/node_modules/.tldr-8nq4AGAt’] { 363 error errno: -13, 363 error code: ‘EACCES’, 363 error syscall: ‘rename’, 363 error path: ‘/usr/…...

「SQL面试题库」 No_30 超过5名学生的课

🍅 1、专栏介绍 「SQL面试题库」是由 不是西红柿 发起,全员免费参与的SQL学习活动。我每天发布1道SQL面试真题,从简单到困难,涵盖所有SQL知识点,我敢保证只要做完这100道题,不仅能轻松搞定面试&#xff0…...

自定义maven插件,在项目中命令启动springboot并加载当前项目资源

背景 最近在制定团队内公用的基础框架,基于单应用多module的架构思路,使用maven管理项目依赖,在项目中定义了一个springboot模块,该模块依赖具体的业务实现模块,启动后通过扫描路径下的类加载服务,业务开发…...

Linux系统【Centos7】更新内核更新软件详细教程

更新内核: 1. 打开终端,输入命令 sudo yum update,等待更新完成。 2. 重启系统,输入命令 sudo reboot。 3. 在 GRUB 引导界面,选择最新的内核版本,按下回车键进入系统。 4. 在终端中输入命令 uname -r&…...

C++ 中new/delete与malloc/free详解

文章目录前言一、new/delete1. 序言2. 使用方法2.1. new 和 delete 基本语法2.2. new 和 delete 的底层实现原理3. 底层原理3.1. operator new 和 operator delete3.2. new 和 delete 的底层实现原理4. 注意事项5. 总结二、malloc/free1. 序言2. 使用方法2.1. malloc 和 free 基…...

crm软件哪个好?该如何选择?

crm软件哪个好?该如何选择? 首先我们需要明确一下什么是好的CRM系统,优质的CRM系统应该具备以下优势: 1)提高销售效率:通过CRM系统,销售人员可以跟踪客户互动历史和交易记录,了解客…...

蓝桥杯第22天(Python)(疯狂刷题第5天)

题型: 1.思维题/杂题:数学公式,分析题意,找规律 2.BFS/DFS:广搜(递归实现),深搜(deque实现) 3.简单数论:模,素数(只需要…...

软件测试面试常问的问题有哪些?

互联发展是很快的,每年都会有新语言的诞生。 我干测试已经三年了,主要负责web功能测试,java编写接口自动化,APP功能测试,APP 接口自动化(也是用的java),面过得测试也差不多30个&…...

js之文件信息读取篇高级基础

文章目录js之文件信息读取(FileReader)获取文件相关信息的两种方式js原生拖拽事件js之文件信息读取(FileReader) 首先这里面会讲一些知识点 bolb 对象FileReader对象 let blob new Blob([heewwekgewgwer], { type: text/plain …...

SQL Server的死锁说明

死锁指南一、了解死锁二、检测并结束死锁2.1、可能死锁的资源三、处理死锁四、最大限度地减少死锁4.1、以相同的顺序访问对象4.2、避免事务中的用户交互4.3、保持交易简短且在一个批次中4.4、使用较低的隔离级别4.5、使用基于行版本控制的隔离级别4.6、使用绑定连接4.7、停止事…...

关于#define的一些小知识

目录 一,#define的声明格式: 二,#define宏的作用是为了完成替换 #define的替换规则: 三,#define使用时常犯的错误 四,宏与函数的比较 4.1,什么时候使用宏? 4.1,…...

rabbitmq普通集群与镜像集群搭建

1.准备三台centos7主机,并关闭防火墙与selinux 2.安装rabbitmq环境必备的Erlang(以下所有操作三台主机均需要执行) 执行以下命令下载配置erlang yum源 curl -s https://packagecloud.io/install/repositories/rabbitmq/erlang/script.rpm.sh | sudo bash使用yum命…...

session和jwt哪个更好

session和jwtsession优点缺点jwt优点缺点总结session 优点 原理简单,易于学习。用户信息存储在服务端,可以快速封禁某个用户。 缺点 占用服务端内存,硬件成本高。多进程,多服务器时,不好同步-需要使用第三方缓存&a…...

基于TPU-MLIR实现UNet模型部署-决赛答辩02

队伍:AP0200023 目录 初赛 一、 模型导出优化 1.1 直接倒出原始模型并转换 1.2 导出模型前处理 1.2.1 导出Resize 1.2.2 导出归一化 1.3导出模型后处理 1.3.1导出 Resize 与 1.3.2导出 ArgMaxout 1.3.3导出特征转RGB 复赛 一、 确定baseline 二、优化模…...

Linux-07 ubuntu 的 chrome 启动不了

文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了,报错如下四、启动不了,解决如下 总结 问题原因 在应用中可以看到chrome,但是打不开(说明:原来的ubuntu系统出问题了,这个是备用的硬盘&a…...

Ascend NPU上适配Step-Audio模型

1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统,支持多语言对话(如 中文,英文,日语),语音情感(如 开心,悲伤)&#x…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

CSS | transition 和 transform的用处和区别

省流总结: transform用于变换/变形,transition是动画控制器 transform 用来对元素进行变形,常见的操作如下,它是立即生效的样式变形属性。 旋转 rotate(角度deg)、平移 translateX(像素px)、缩放 scale(倍数)、倾斜 skewX(角度…...

代码规范和架构【立芯理论一】(2025.06.08)

1、代码规范的目标 代码简洁精炼、美观,可持续性好高效率高复用,可移植性好高内聚,低耦合没有冗余规范性,代码有规可循,可以看出自己当时的思考过程特殊排版,特殊语法,特殊指令,必须…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现企业微信功能

1. 开发环境准备 ​​安装DevEco Studio 3.1​​: 从华为开发者官网下载最新版DevEco Studio安装HarmonyOS 5.0 SDK ​​项目配置​​: // module.json5 {"module": {"requestPermissions": [{"name": "ohos.permis…...

6个月Python学习计划 Day 16 - 面向对象编程(OOP)基础

第三周 Day 3 🎯 今日目标 理解类(class)和对象(object)的关系学会定义类的属性、方法和构造函数(init)掌握对象的创建与使用初识封装、继承和多态的基本概念(预告) &a…...

goreplay

1.github地址 https://github.com/buger/goreplay 2.简单介绍 GoReplay 是一个开源的网络监控工具,可以记录用户的实时流量并将其用于镜像、负载测试、监控和详细分析。 3.出现背景 随着应用程序的增长,测试它所需的工作量也会呈指数级增长。GoRepl…...

大数据驱动企业决策智能化的路径与实践

📝个人主页🌹:慌ZHANG-CSDN博客 🌹🌹期待您的关注 🌹🌹 一、引言:数据驱动的企业竞争力重构 在这个瞬息万变的商业时代,“快者胜”的竞争逻辑愈发明显。企业如何在复杂环…...

Docker、Wsl 打包迁移环境

电脑需要开启wsl2 可以使用wsl -v 查看当前的版本 wsl -v WSL 版本: 2.2.4.0 内核版本: 5.15.153.1-2 WSLg 版本: 1.0.61 MSRDC 版本: 1.2.5326 Direct3D 版本: 1.611.1-81528511 DXCore 版本: 10.0.2609…...