Java-线程的生命周期7大状态

        在 Java 中,线程的生命周期可以分为多个状态,这些状态描述了线程从创建到终止的整个过程。Java 线程的生命周期主要包括以下七大状态:

1.新建状态(New)

        当一个线程对象被创建但尚未调用 start() 方法时,线程处于新建状态。此时,线程还没有开始执行。

2.可运行状态(Ready)

        当调用 start() 方法后,线程进入可运行状态。在这个状态下,线程可能正在运行,也可能在等待操作系统分配 CPU 时间片。

3.运行状态(Running)

        当线程获得 CPU 时间片并开始执行时,线程进入运行状态。在这个状态下,线程正在执行其任务。

4.阻塞状态(Blocked)

        当线程由于某些原因(如等待 I/O 操作完成、等待获取锁等)暂时无法继续执行时,线程进入阻塞状态。在这个状态下,线程不会占用 CPU 资源。

5.等待状态(Waiting)

        当线程调用 Object.wait()Thread.join() 或 LockSupport.park() 等方法时,线程进入等待状态。在这个状态下,线程等待其他线程显式地唤醒。

6.计时等待状态(Timed Waiting)

        当线程调用带有超时参数的方法(如 Thread.sleep(long)Object.wait(long)Thread.join(long) 或 LockSupport.parkNanos(long))时,线程进入计时等待状态。在这个状态下,线程等待一段时间后自动恢复。

7.终止状态(Terminated)

        当线程完成其任务或因异常而终止时,线程进入终止状态。在这个状态下,线程不再执行,并且无法再次启动。

Runnable 状态的细分

在 Java 官方文档中,实际上是6个状态,Runnable 状态实际上包含了两个子状态:

  • 就绪状态(Ready):线程已经准备好运行,等待操作系统调度。
  • 运行状态(Running):线程正在执行其任务,占用 CPU 时间片。

区别 

  1. 就绪状态(Ready)

    • 线程已经调用了 start() 方法,但尚未获得 CPU 时间片。
    • 线程在就绪队列中等待操作系统调度。
    • 线程在就绪状态下不会执行任何代码。
  2. 运行状态(Running)

    • 线程获得了 CPU 时间片,正在执行其任务。
    • 线程在运行状态下会执行其 run() 方法中的代码。
    • 线程在运行状态下可能会因为时间片用完而被操作系统暂停,重新回到就绪状态

public class ThreadLifecycleExample {public static void main(String[] args) {// 新建状态Thread thread = new Thread(() -> {System.out.println("线程正在运行...");try {// 计时等待状态Thread.sleep(2000);} catch (InterruptedException e) {e.printStackTrace();}System.out.println("线程运行结束。");});// 可运行状态thread.start();// 主线程等待子线程完成try {thread.join();} catch (InterruptedException e) {e.printStackTrace();}// 终止状态System.out.println("子线程已终止。");}
}

注意事项

  • 线程调度:操作系统负责线程的调度,具体何时从就绪状态切换到运行状态由操作系统决定。
  • 状态转换:线程在运行过程中可能会在就绪状态和运行状态之间多次切换,这取决于操作系统的调度策略和线程的优先级。
  • 并发性:多个线程可能在同一时间处于就绪状态,等待操作系统调度执行。
  • 性能考虑:在设计多线程程序时,需要考虑线程的状态转换对性能的影响,避免频繁的状态切换和线程阻塞。

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

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

相关文章

mysql高级sql

一,查询 1.按关键字排序 1.1用 **ORDER BY** 语句来实现排序: - ORDER BY 语句用于对查询结果进行排序。可以根据一个或多个字段的值进行升序(ASC)或降序(DESC)排序。1.2排序可针对一个或多个字段&#…

终于有人把数据中台讲明白了

在大数据发展的黄金期,几乎所有的高科技企业都在思考一个问题:海量数据作为大多数企业发展不可避免的一个趋势之后,企业该怎么去应用这部分数据资产,会对其商业产生什么影响,如何使数据对企业产生正面的推动而不是成为…

mysql高级知识之集群

一、安装 源码编译MySQL,若需要MySQLtar包可私信我 #创建数据目录 mkdir /data/mysql -p#安装相关依赖 yum install libtirpc-devel-0.2.4-0.16.el7.x86_64.rpm yum install cmake gcc-c++ openssl-devel ncurses-devel.x86_64 libtirpc-devel-1.3.3-8.el9_4.x86_64.rpm rpcgen…

安防视频综合管理系统EasyCVR视频汇聚平台集群部署出现状态不同步的情况是什么原因?

随着视频监控技术的快速发展,各类视频资源的整合、管理与分发成为了安防行业的重要挑战。视频综合管理系统EasyCVR视频汇聚平台通过集群部署,实现了视频资源的高效整合与管理。集群部署不仅能够提升系统的处理能力和稳定性,还能有效避免单点故…

JVM面试(四)类加载器和双亲委派机制

什么是类加载器? 简单来说的话,是用于实现“类加载动作”的加载器 “通过一个类的全限定名来获取描述该类的二进制字节流”这个动作放到Java虚拟机外部去实现,以便让应用程序自己决定如何去获取所需的类。实现这个动作的代码被称为“类加载器…

Ollama拉起本地模型以及rag系统部署。

什么是 Ollama ? Ollama 是一个简明易用的本地大模型运行框架。能在本地启动并运行 Llama、qwen、Gemma 及其他大语言模型,没有GPU资源照样可以拉起模型,和LocalAI 比较类似,但是加载模型更容易。 1.安装 安装后运行&#xff0c…

解剖学上合理的分割:通过先验变形显式保持拓扑结构|文献速递--基于深度学习的医学影像病灶分割

Title 题目 Anatomically plausible segmentations: Explicitly preserving topology through prior deformations 解剖学上合理的分割:通过先验变形显式保持拓扑结构 01 文献速递介绍 进行环向应变或壁厚度的计算,这些测量通常用于诊断肥厚性心肌病…

Vue前端路由详解——以Ruoyi框架为案例学习

Vue路由 Vue路由详解_vue 页面路由-CSDN博客 路由模式 Vue 的路由模式:hash 模式和 history 模式的区别_vue路由history和hash的区别-CSDN博客 URL格式: Hash模式:URL中包含#号,用于区分页面部分,实际请求的页面地址…

【深度学习与NLP】——词嵌入Embedding技术

目录 1.词嵌入的作用 2.嵌入矩阵的计算 3.Embedding层的代码实验 词嵌入(Embedding)技术是一种将词汇映射到低维连续向量空间的方法。将离散的单词数据处理成连续且固定长度的向量,使模型可以学习和处理语义信息。 假设需要将["Are&…

【MySQL00】【 杂七杂八】

文章目录 一、前言二、MySQL 文件1. 参数文件2. 日志文件3. 套接字文件4. pid 文件5. 表结构定义文件6. InnoDB 存储引擎文件 二、BTree 索引排序三、InnoDB 关键特性1. 插入缓冲1.1 Insert Buffer 和 Change Buffer1.1 缓冲合并 2. 两次写2. 自适应哈希索引3. 异步IO4. 刷新邻…

关于武汉芯景科技有限公司的A/D转换芯片XJ3021开发指南(兼容MCP3021)

一、芯片引脚介绍 1.芯片引脚 2.引脚描述 二、系统结构图 三、时序(IIC通信) 四、程序代码 XJ3021.C /** XJ3021.c** Created on: 2024年8月23日* Author: Administrator*/ #include "softiic.h" #include "XJ3021.h" #inc…

《Cloud Native Data Center Networking》(云原生数据中心网络设计)读书笔记 -- 09部署OSPF

本章的目的是帮助网络工程师确定网络的理想 OSPF 配置。本章将回答以下问题 应何时在数据中使用OSPF ?配置 OSPF 的关键设计原则是什么?OSPFv2 和 OSPFv3 之间有什么区别,应如何使用?如何在路由协议栈中配置 OSPF ?如何在服务器上配置 OSPF,例如为容…

【MySQL08】【死锁】

文章目录 一、前言二、查看事务加锁情况1. 使用 information_schema 数据库中表获取锁信息1.1 INNODB_TRX1.2 INNODB_LOCKS1.3 INNODB_LOCK_WAITS 2. 使用 SHOW ENGIN INNODB STATUS 获取锁信息 三、死锁四、参考内容 一、前言 最近在读《MySQL 是怎样运行的》、《MySQL技术内…

Android之Handler的post方法和sendMessage的区别

目录 post 方法方法特点 sendMessage 方法方法特点 使用场景区别总结 Handler 类在 Android 中用于在不同线程之间传递消息和执行代码。它提供了两种主要的方式来执行任务:通过 post 方法和通过 sendMessage 方法。这两种方法有不同的使用场景和特点。 post 方法 方…

浅谈架构实战

目录 背景 1 架构演变 2 如何实现高层的复用 2 中台产生案例 3 技术架构的核心要点 4 技术架构的高可用案例 背景 业务架构、数据架构、应用架构和技术架构它们是相互关联和相互支持的,共同构成了企业的总体架构,业务架构是源头,然后才…

自动生成对话视频!如何使用Captions的AI视频生成与编辑API工具?

Captions公司最近发布了一套AI驱动的视频生成和编辑API工具,为创作者和开发者提供了一个强大的视频创作生态系统。这个系统包含AI Creator、AI Twin、AI Edit、和AI Translate四大核心功能,每个工具都针对不同的创作需求进行优化。下面我们就一起来详细测…

第九周:机器学习

目录 摘要 Abstract 一、RNN 1、引入 2、RNN的分类 二、LSTM 1、基本结构 2、具体步骤 3、举例说明 4、原理理解 总结 摘要 本周主要围绕RNN进行探讨,从为什么需要这类”循环网络“入手,提到了”slot filling“技术,接着又对R…

AT3340:支持BDS/GPS双模授时板数据手册

AT3340采用ATGM331C-5T31授时模块,是高授时精度的BDS/GPS双模接收机板卡,包含32个跟踪通道,支持GPS和BDS的单系统授时定位和双系统联合授时定位,可以通过上位机命令切换。其中的射频前端芯片和基带芯片全部由杭州中科微独立研发&a…

RAG数据集自动构造探索, 附prompt

从文档中手动创建数百个 QA(问题-上下文-答案)样本可能非常耗时且劳动密集。此外,人工生成的问题可能难以达到全面评估所需的复杂程度,最终影响评估的质量。通过使用合成数据生成,开发人员在数据聚合过程中的时间可以减…