Java中线程的生命周期
已发表: 2023-01-27目录
Java 线程基础:
Java 中的线程有助于在单个进程内执行多个活动。 它被认为是一个轻量级的过程。 线程也可以定义为一系列已执行的语句。 Java 中的每个线程都有自己的堆栈、程序计数器和局部变量。 Java 线程也可能是一系列嵌套的方法调用。 内存、每个进程的状态和文件由线程共享。
Java中线程的使用:
- 执行后台或异步处理
- 增强 GUI 应用程序的灵敏度
- 实现多处理器系统的积极方面
- 在存在多个的情况下简化编程逻辑
调用线程时存在两条执行路径。 两条路径之一用于线程执行,另一条路径将跟踪线程调用之后的语句。 Java中的每个线程都有独立的内存空间和栈。
在 Java 代码中使用线程时遇到的风险因素如下。
- 在线程访问公共变量以一致地查看数据的情况下,需要线程之间的适当协调。
- 线程的性能和维护,如果在程序中过度使用,就会变得困难。
Java中线程的生命周期:
在程序执行的任何时刻,Java 中的线程都处于以下任何一种状态。
- 新的
- 封锁
- 可运行
- 定时等待
- 等待
- 终止
Java线程生命周期详解
新线程:
新创建的线程处于“新建”状态。 在此状态下不进行运行。 处于新状态的线程代码的执行尚未发生。 它尚未运行。
可运行状态:
处于可运行状态的线程已准备好运行。 处于此状态的线程可能随时准备运行,也可能已经在运行。 线程调度程序负责为线程运行分配时间。 在多线程程序中,每个单独的线程都被分配了特定的时间。 每个单独的线程运行一小段时间,然后遇到暂停。 然后将 CPU 交给另一个线程,以便为其他线程提供运行机会。 此时,所有等待CPU的准备运行线程和当前正在运行的线程都处于可运行状态。
查看我们的免费技术课程,在竞争中脱颖而出。
探索我们的热门软件工程课程
LJMU & IIITB 计算机科学硕士 | 加州理工学院 CTME 网络安全证书课程 |
全栈开发训练营 | 区块链PG项目 |
全栈开发中的执行 PG 计划 | |
在下面查看我们所有的课程 | |
软件工程课程 |
等待/阻塞状态:
当线程暂时不运行时,它处于以下任何一种状态。
- 等待
- 封锁
等待 I/O 完成的线程处于阻塞状态。 线程调度器的功能是通过重新激活阻塞或等待线程来调度它的执行。 处于此状态的任何线程都不允许进一步继续执行,直到它转换为可运行状态。 处于阻塞或等待状态的线程不使用任何 CPU 周期。
当一个线程试图访问当前受其他线程保护的代码的受保护部分时,它会被强制阻塞。 当为所有线程解锁该部分时,调度程序将等待受保护部分的线程之一转换为可运行状态。 另一方面,当一个线程在特定条件下等待另一个线程时,它处于等待状态。 一旦满足指定的等待条件,处于等待状态的线程将被推送到可运行状态。 如果当前正在运行的线程进入等待/阻塞状态,则线程调度程序会调度可运行序列中的另一个线程运行。
定时等待:
当使用超时参数调用方法时,线程处于定时等待状态。 线程将继续处于此状态,直到指定的超时完成或直到收到通知。 例如,如果一个线程调用条件等待或睡眠,它就会转换为定时等待状态。
终止状态:
由于以下任一原因,线程会终止。
- 线程内代码段执行完成后线程正常退出。
- 发生任何罕见的错误事件,例如未处理的异常和分段错误。
处于终止状态的线程不消耗任何 CPU 周期。
从世界一流大学在线学习软件开发课程。 获得执行 PG 课程、高级证书课程或硕士课程,以快速推进您的职业生涯。
需求软件开发技能
JavaScript 课程 | 核心 Java 课程 | 数据结构课程 |
Node.js 课程 | 课程 | 全栈开发课程 |
NFT课程 | 开发运营课程 | 大数据课程 |
React.js 课程 | 网络安全课程 | 云计算课程 |
数据库设计课程 | Python 课程 | 加密货币课程 |
Java中线程状态的实现:
要在 Java 中完成线程的当前状态,我们使用方法 Thread.getState()。 Java 还提供了 java.lang.Thread.State 类,其中定义了线程状态的 ENUM 常量。 详细信息总结在下表中。
常量类型 | 宣言 | 描述 |
新的 | 公共静态最终 Thread.State 新 | 它是刚刚创建但尚未开始执行的线程的线程状态。 |
可运行 | public static final Thread.State RUNNABLE | 它描述了已经运行的线程或处于准备运行状态的线程的状态。 同一线程对于 Java 虚拟机可以处于可运行状态,而对于其他操作系统资源(例如处理器)则处于等待状态。 |
封锁 | public static final Thread.State BLOCKED | 它描述了阻塞等待监视器锁的线程的状态。 它保持相同的状态,直到监视器块进入同步方法/块或在调用 Object.wait() 后重新进入同步方法。 |
等待 | 公共静态最终 Thread.State 等待 | 它描述了由于调用以下方法之一而等待的线程状态。
等待状态可能是因为另一个线程完成了特定任务。 |
定时等待 | 公共静态最终 Thread.State TIMED_WAITING | 它是等待指定时间的线程的一种状态。 调用以下任何方法都会导致线程处于定时等待状态,并具有指定的正等待时间。
|
终止 | public static final Thread.State 已终止 | 它是已完成执行其组成代码语句的线程的状态。 |
线程刚创建时处于 NEW 状态。 当在线程上调用 .start() 方法时,线程调度程序会将其移至 Runnable 状态。 当在线程实例上调用 join() 方法时,当前正在执行代码语句的线程将等待该线程终止。 因此,在控制台上打印最终语句之前,程序会在线程 2 上调用 join() 函数,并使线程 1 保持等待状态,直到线程 2 完成其执行并进入终止状态。 由于线程 1 正在等待线程 2 的执行完成,因此它处于 WAITING 状态。
阅读我们与软件开发相关的热门文章
如何在 Java 中实现数据抽象? | Java中的内部类是什么? | Java 标识符:定义、语法和示例 |
通过示例了解 OOPS 中的封装 | C 中的命令行参数解释 | 2022 年云计算的十大特点 |
Java 中的多态性:概念、类型、特征和示例 | Java 中的包以及如何使用它们? | Git 初学者教程:从零开始学习 Git |
在 Java 程序中使用线程的优缺点:
在 Java 程序中使用线程有以下好处。
- 减少开发代码所需的时间
- 降低维护成本
- 增强复杂应用程序的性能
- 提高用户界面的响应度
- 并行化任务
- 线程用于服务器应用程序以提高资源的高吞吐量和利用率。
- 如果一个线程无法使用所有 CPU 的计算资源,则另一个线程的运行将保持这些资源的占用。
- 如果同一组数据被多个线程操作,它们的缓存是可以共享的。 这导致更好地使用缓存或协调其值。
在 Java 程序中使用线程有几个缺点。 下面列出了其中一些。
- 在共享缓存、转换后备缓冲区 (TLB) 或任何其他硬件资源时,多个线程可能会相互干扰。
- 即使只有一个线程在运行,也不能提高线程的执行时间。 然而,执行时间的降低是允许的。 这可能是由于额外的流水线阶段和/或适应线程切换硬件所需的较慢频率。
- 与多处理相比,操作系统和应用程序都需要进行大量更改,因为硬件支持更多地暴露于多线程中的软件。
如果您有兴趣了解有关 Java、全栈软件开发的更多信息,请查看 upGrad 和 IIIT-B 的软件开发执行 PG 课程——全栈开发专业化,该课程专为在职专业人士设计,并提供 500 多个小时的严格培训、9 个以上的项目和任务、IIIT-B 校友身份、实用的实践顶点项目和顶级公司的工作协助。