Thread States in Java2025年5月10日 | 阅读 4 分钟 线程是正在执行的程序,它被创建以执行特定任务。Java 线程的生命周期从其诞生开始,到其死亡结束。 Thread 类的 start() 方法用于启动线程的执行,线程进入可运行状态;Thread 类的 sleep() 和 wait() 方法将线程置于不可运行状态。 在非可运行状态之后,线程再次进入可运行状态并开始执行。线程的 run() 方法非常重要。在执行完 run() 方法后,线程的生命周期就完成了。 线程的这些阶段都是 Java 线程中的线程状态。 要在程序中使用线程,识别线程状态很重要。下图显示了 Java 线程生命周期中的线程状态。 ![]() Thread States in Java线程是程序中的一条执行路径,它会经历以下线程状态。这五种状态如下:
新建 (Newborn State)当创建 Thread 类的实例时,一个新线程诞生,并进入新生状态。也就是说,当线程诞生时,它进入新状态,但其执行阶段尚未在实例上开始。 简而言之,Thread 对象已被创建,但它不能执行任何程序语句,因为它不处于线程的执行状态。只能在新建线程上调用 start() 方法;否则,将抛出 **IllegalThreadStateException** 异常。 可运行状态 (Runnable State)新生线程的第二个阶段是执行阶段。当在线程的新实例上调用 start() 方法时,它会进入可运行状态。 如果所有线程具有相等的优先级,CPU 会根据先来先服务的原则为每个线程的执行分配一个时间片。分配时间给线程的过程称为**时间分片 (time slicing)**。线程可以从运行中、等待中或新建状态进入可运行状态。 运行状态 (Running State)运行状态意味着处理器(CPU)已为线程分配了执行时间片。当线程调度器从可运行状态选择一个线程执行时,它会进入运行状态。请看上图。 在运行状态下,处理器为其执行分配时间,并执行其 run 方法。这是线程执行其实际功能的状态。线程只能从可运行状态进入运行状态。 运行中的线程可能在以下任何一种情况下放弃其控制,并进入阻塞状态。
阻塞状态 (Blocked State)当线程被挂起、休眠或等待一段时间以满足某个条件时,它就被认为是处于阻塞状态。 已死状态 (Dead State)当线程的 run() 方法完成语句执行时,线程就会死亡或进入死亡状态。也就是说,当线程退出 run() 方法时,线程就被终止或死亡。当调用 stop() 方法时,线程也可能死亡。 在 Java 线程的生命周期中,线程会以多种方式从一个状态移动到另一个状态。这是因为在多线程环境中,当多个线程执行时,一次只有一个线程可以使用 CPU。 所有其他线程都处于其他状态,要么在等待 CPU 时间轮转,要么在等待满足某些条件。因此,线程始终处于这五种状态之一。 Java 线程程序ThreadDemo.java 输出 Thread 1 i in Thread 1 i = 1 Main Thread End Thread 2 i in Thread 2 i = 1 i = 2 i = 3 i = 4 i = 5 Thread 2 Completed. i = 2 i = 3 i = 4 i = 5 Thread 1 Completed. 在上面的程序中,通过创建 Thread 类的实例 t1 和 t2 来实现 Java 线程。实现了 Thread 类的 start()、yield()、run()、sleep() 等不同方法。 下一个主题活动选择问题(java) |
如何在 Java 中编写测试用例?测试用例是软件创建时需要测试的条件。在用 Java 编写测试用例之前,我们需要了解什么是测试用例。本节将简要介绍测试用例和...
阅读9分钟
变量是 Java 编程领域中存储数据的关键部分。静态变量和局部实例变量是两种最常见的变量形式。尽管它们都具有存储数据的职能,但在特性和应用方面有所不同。在...
阅读 4 分钟
java.nio.DoubleBuffer 有 array() 方法。使用 DoubleBuffer 类返回支持该缓冲区的 double 数组。对此缓冲区的更改也将更改返回数组的内容。在调用此函数之前,调用 hasArray() 方法以...
阅读 4 分钟
BiConsumer 接口接受两个输入参数,不返回任何结果。它是 Consumer 接口的二元特化。它提供一个函数式方法 accept(Object, Object) 来执行自定义操作。方法 方法说明 void accept(T t, U u) 它对给定的参数执行此操作。 default BiConsumer<T,U> andThen(BiConsumer<?...
阅读1分钟
finalize() 方法是 `java.lang.Object` 类的受保护方法。它用于在对象被从内存中移除之前执行清理操作(例如关闭打开的文件、释放内存或关闭连接)。方法签名:`protected void finalize() throws Throwable { ...`
5 分钟阅读
在 Java 编程语言中,数组是一种数据结构,它在连续的内存位置中存储相同类型的值。可以使用相应值的索引来访问这些值。而字符串是一个对象,它存储字符序列……
5 分钟阅读
MD5 是一种加密算法,提供哈希函数以获得固定长度的 128 位(16 字节)哈希值。使用 Java,我们可以通过使用 `java.security` 包中定义的 `MessageDigest` 类在应用程序中实现 MD5 哈希。Java MessageDigest 类...
阅读 3 分钟
应用程序创建中最常用的技术是 Java。人们和企业喜欢它,因为它能将原始创意转化为有用的软件解决方案。Java 编程认证可以证明我们的专业知识,也可以帮助我们学习 Java 编程语言。Java...
阅读 6 分钟
格雷码(Grey Code)以弗兰克·格雷(Frank Grey)的名字命名,是一种二进制数制系统,其中两个连续值之间只有一个比特位的差异。它也被称为“反射二进制码”,因为它的 (n-1) 位形式可以被反射并附加到自身...
阅读 4 分钟
在 Java 中,对象是组织代码和构建复杂数据结构的基本构建块。在 Java 编程中,将对象传递给方法是一个至关重要的概念,因为它允许我们操作这些对象并改变它们的特性。附带代码示例和...
5 分钟阅读
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India