面试题:线程有哪几种状态以及各种状态之间的转换?

2024-06-12 23:04

本文主要是介绍面试题:线程有哪几种状态以及各种状态之间的转换?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

线程在其生命周期中可以经历多种状态,不同资料来源可能给出略微不同的状态划分,但大体上可以概括为以下几种主要状态及它们之间的转换:

  1. 新建状态(New)

    • 当使用 new 关键字创建一个线程对象后,线程就处于新建状态。此时,线程还未开始执行,仅在 JVM 中分配了内存,并初始化了成员变量。
  2. 可运行状态(Runnable)

    • 当调用线程的 start() 方法后,线程进入可运行状态。此状态又可以细分为两种:
      • 就绪状态:线程已经准备好运行,等待CPU调度执行。
      • 运行状态:线程获得CPU时间片并正在执行。需要注意的是,Java文档有时将就绪和运行统称为“Runnable”状态。
  3. 阻塞状态(Blocked)

    • 线程在运行过程中,由于某种原因(如等待I/O操作完成、试图获取某个锁而被阻塞、调用 wait() 方法等)暂停执行,进入阻塞状态。在此状态下,线程不会消耗CPU时间。
  4. 等待状态(Waiting)

    • 线程主动放弃CPU执行权,进入无限期等待状态,直到被其他线程通过特定操作(如 notify() 或 notifyAll())唤醒。这包括调用 Object.wait()Thread.join() 无参方法或 LockSupport.park() 等情况。
  5. 超时等待状态(Timed Waiting)

    • 类似于等待状态,但线程不是无限等待,而是设置了等待的超时时间。例如,调用 Thread.sleep(long millis)Object.wait(long timeout)Thread.join(long millis) 或 LockSupport.parkNanos(long nanos) 等方法后,线程会在指定时间后自动醒来。
  6. 死亡状态(Terminated/Dead)

    • 线程执行完毕(即 run() 方法结束),或者因抛出未捕获的异常而提前结束,线程进入死亡状态,不再参与调度。

状态转换图概述

  • 新建状态 -> 可运行状态:调用 start() 方法。
  • 可运行状态 -> 阻塞状态:等待资源(如锁)。
  • 可运行状态 -> 等待/超时等待状态:调用相应的等待方法。
  • 阻塞/等待/超时等待状态 -> 可运行状态:等待条件满足,如获得锁、被唤醒、等待时间到期等。
  • 可运行状态 -> 死亡状态run() 方法执行完毕或异常终止。

这篇关于面试题:线程有哪几种状态以及各种状态之间的转换?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1055587

相关文章

Prometheus+cpolar如何在手机上也能监控服务器状态?

《Prometheus+cpolar如何在手机上也能监控服务器状态?》本文强调了通过Cpolar这一内网穿透工具,轻松突破Prometheus仅限于局域网访问的限制,实现外网随时随地访问监控数据,教你... 目录前言1.安装prometheus2.安装cpolar实现随时随地开发3.配置公网地址4.保留固定

JAVA线程的周期及调度机制详解

《JAVA线程的周期及调度机制详解》Java线程的生命周期包括NEW、RUNNABLE、BLOCKED、WAITING、TIMED_WAITING和TERMINATED,线程调度依赖操作系统,采用抢占... 目录Java线程的生命周期线程状态转换示例代码JAVA线程调度机制优先级设置示例注意事项JAVA线程

Python轻松实现Word到Markdown的转换

《Python轻松实现Word到Markdown的转换》在文档管理、内容发布等场景中,将Word转换为Markdown格式是常见需求,本文将介绍如何使用FreeSpire.DocforPython实现... 目录一、工具简介二、核心转换实现1. 基础单文件转换2. 批量转换Word文件三、工具特性分析优点局

使用C#实现将RTF转换为PDF

《使用C#实现将RTF转换为PDF》RTF(RichTextFormat)是一种通用的文档格式,允许用户在不同的文字处理软件中保存和交换格式化文本,下面我们就来看看如何使用C#实现将RTF转换为PDF... 目录Spire.Doc for .NET 简介安装 Spire.Doc代码示例处理异常总结RTF(R

Spring Boot基于 JWT 优化 Spring Security 无状态登录实战指南

《SpringBoot基于JWT优化SpringSecurity无状态登录实战指南》本文介绍如何使用JWT优化SpringSecurity实现无状态登录,提高接口安全性,并通过实际操作步骤... 目录Spring Boot 实战:基于 JWT 优化 Spring Security 无状态登录一、先搞懂:为什

深入理解Redis线程模型的原理及使用

《深入理解Redis线程模型的原理及使用》Redis的线程模型整体还是多线程的,只是后台执行指令的核心线程是单线程的,整个线程模型可以理解为还是以单线程为主,基于这种单线程为主的线程模型,不同客户端的... 目录1 Redis是单线程www.chinasem.cn还是多线程2 Redis如何保证指令原子性2.

OFD格式文件及如何适应Python将PDF转换为OFD格式文件

《OFD格式文件及如何适应Python将PDF转换为OFD格式文件》OFD是中国自主研发的一种固定版式文档格式,主要用于电子公文、档案管理等领域,:本文主要介绍OFD格式文件及如何适应Python... 目录前言什么是OFD格式文档?使用python easyofd库将PDF转换为OFD第一步:安装 eas

基于Java实现PPT到PDF的高效转换详解

《基于Java实现PPT到PDF的高效转换详解》在日常开发中,经常会遇到将PPT文档批量或单文件转换为PDF的需求,本文将详细介绍其使用流程、核心代码与常见问题解决方案,希望对大家有所帮助... 目录一、环境配置Maven 配置Gradle 配置二、核心实现:3步完成PPT转PDF1. 单文件转换(基础版)

使用C#实现Excel与DataTable的相互转换

《使用C#实现Excel与DataTable的相互转换》在软件开发中,Excel文件和DataTable是两种广泛使用的数据存储形式,本文将介绍如何通过C#实现Excel文件与Data... 目录安装必要的库从 Excel 导出数据到 DataTable从 DataTable 导入数据到 Excel处理 E

C++实现一个简易线程池的使用小结

《C++实现一个简易线程池的使用小结》在现代软件开发中,多线程编程已经成为提升程序性能的常见手段,本文主要介绍了C++实现一个简易线程池的使用小结,感兴趣的可以了解一下... 在现代软件开发中,多线程编程已经成为提升程序性能的常见手段。无论是处理大量 I/O 请求的服务器,还是进行 CPU 密集型计算的应用