线程的生命周期

devtools/2024/11/29 15:45:25/

线程的生命周期描述了线程从创建到消亡的整个过程,以及在这个过程中线程所经历的不同状态。以下是线程生命周期的详细解释:

一、新建(NEW)

  • 当使用new关键字创建一个线程对象时,线程进入新建状态。此时,线程仅仅是一个对象实例,它还没有被启动,也就是说它的执行代码(run方法)还没有被执行。

二、就绪(READY)

  • 当线程对象调用了start()方法后,线程进入就绪状态。在这个状态下,线程已经具备了执行资格,但它还没有被分配CPU时间片,因此还不能立即执行。线程会等待操作系统的调度,一旦获得CPU时间片,就会进入运行状态。

三、运行(RUNNING)

  • 当线程获得CPU时间片后,它开始执行run方法中的代码,此时线程处于运行状态。在运行过程中,线程可能会因为时间片用完、遇到I/O操作、被其他线程抢占CPU等原因而暂停执行,但这并不意味着线程的生命周期结束。暂停执行的线程会返回到就绪状态,等待下一次获得CPU时间片。

四、阻塞(BLOCKED)

  • 线程在运行过程中,如果试图获取某个已经被其他线程持有的锁(如同步监视器),或者调用了某些会导致线程阻塞的方法(如wait()join()等),那么线程会进入阻塞状态。在阻塞状态下,线程不会释放已经占有的资源(如锁),只是暂时停止执行。当阻塞条件被满足(如锁被释放、notify()notifyAll()方法被调用等),线程会重新进入就绪状态,等待CPU的调度。

五、等待(WAITING)

  • 线程在等待某个特定条件成立时,会进入等待状态。与阻塞状态不同,等待状态的线程不会占用锁资源。线程可以通过调用wait()方法进入等待状态,也可以通过其他线程调用notify()notifyAll()方法唤醒。

六、超时等待(TIMED_WAITING)

  • 线程在等待某个特定条件成立时,如果设置了超时时间,那么线程会进入超时等待状态。在超时等待状态下,线程会在指定的时间内等待条件成立。如果超时时间到达而条件仍未成立,线程会返回到就绪状态;如果条件在超时时间内成立,线程会被唤醒并执行后续代码。线程可以通过调用sleep()wait(long timeout)join(long millis)等方法进入超时等待状态。

七、死亡(TERMINATED)

  • 当线程的run方法执行完毕,或者线程因为抛出异常而终止时,线程会进入死亡状态。在死亡状态下,线程的生命周期结束,它不能再被启动或执行任何操作。线程死亡后,其占用的内存等资源会被释放。

需要注意的是,线程的生命周期状态并不是完全独立的,它们之间存在转换关系。例如,线程可以从就绪状态转换为运行状态,也可以从运行状态转换为阻塞状态或等待状态等。这些转换关系取决于线程的执行逻辑和操作系统的调度策略。

了解线程的生命周期有助于我们更好地编写和管理多线程程序,避免线程之间的冲突和死锁等问题。同时,也有助于我们更好地理解和优化程序的性能。


http://www.ppmy.cn/devtools/137957.html

相关文章

Flink 之 Window 机制详解(上):基础概念与分类

《Flink 之 Window 机制详解(上):基础概念与分类》 一、引言 在当今大数据蓬勃发展的时代,Flink 作为一款卓越的分布式流处理和批处理框架,以其独特的架构和强大的功能在数据处理领域占据着重要地位。其底层基于流式…

SQL Server 中的游标:介绍、效率、使用场景及替代方法对比

在 SQL Server 中,游标(Cursor)是一种数据库对象,用于逐行处理查询结果集。虽然游标在某些场景下非常有用,但它们的性能往往不如集合操作(set-based operations)。本文将详细介绍游标的概念、使…

设计模式---单例模式

单例模式:确保一个类只有一个实例,并提供该实例的全局访问点, 本文介绍6中常用的实现方式 懒汉式-线程不安全 以下实现中,私有静态变量 uniqueInstance 被延迟实例化,这样做的好处是,如果没有用到该类,那么…

怀念食家巷平凉面点,重拾美好

在美食的长河中,总有一些味道能勾起我们内心深处最温暖的回忆。食家巷平凉面点,便是这样一种带着浓郁乡愁与美好记忆的传统美食。平凉,这座历史悠久的城市,孕育出了独具特色的面点文化。食家巷的平凉面点白饼、烤馍,传…

faiss VS ChromaDB

faiss faiss 是一个开源的机器学习库,由Facebook AI Research(FAIR)开发,主要用于高效的大规模向量搜索和聚类。 faiss 的核心优势在于它为高维向量空间中的数据提供了快速的近似最近邻搜索(ANNS)算法&am…

DevOps工程技术价值流:Jenkins驱动的持续集成与交付实践

一、Jenkins系统概述 Jenkins:开源CI/CD引擎的佼佼者 Jenkins,作为一款基于Java的开源持续集成(CI)与持续交付(CD)系统,凭借其强大的插件生态系统,成为DevOps实践中不可或缺的核心…

Linux入门系列--用户与权限

一、前言 1.注意: 【】用户是Linux系统工作中重要的一环,用户管理包括 用户 与 组账号 的管理 【】在Linux系统中,不论是由本机或是远程登录(SSH)系统,每个系统都必须拥有一个账号,并且对于不同的系统资源拥有不同的使…

vue3 tinymce7版本 完美适配基本需求(特殊需求外)

直接上代码 然后根据自己需求来调整代码内的toolbar功能设置 另外添加两个没有plugin的插件 首行缩进 以及调整段落大小 (目前没有太细看文档 不入门也不太好看懂~) 我这是从版本4升级到6的 已解决弹窗上使用问题 后面会出个相关配置文档的 …