1.新生线程
当new一个线程时,如new Thread(r),该线程的状态是new。当一个线程处于新生状态时,程序还有没有开始运行线程中的代码。在线程运行之前还有一些簿记工作要做。
2.可运行线程
调用start()方法,线程处于runnable状态。可能运行也可能没有运行,取决于系统(线程的优先级和时间片机制)。在具有多个处理器的机器上,每个处理器,运行一个线程,可以有多个线程并行运行(如果线程多出处理器的数目,调度器依然采用时间片机制)。
3.被阻塞线程和等待线程
当线程处于被阻塞或等待状态时,它暂时不活动,不运行任何代码且消耗最少的资源。直到线程调度器重新激活它。
(1) 阻塞状态 : 当一个线程试图获取一个内部的对象锁(不是java.util.concurrent库中得锁),而该锁被其他线程持有,则该线程进入阻塞状态。当所有其他线程释放该锁,并且线程调度器允许本线程持有它的时候,该线程将变成非阻塞状态。
(2) 等待状态 : 当一个线程等待另一个线程通知调度器一个条件时,它自己进入等待状态。 比如:调用Object.wait或Thread.join方法,或者是等待java.util.concurrent库中的lock或Condition时,就会出现这种状态。被阻塞和和等待状态有很大的不同。
(3) 计时等待状态 : 有几个方法有一个超时参数。调用它们导致线程进入计时等待(timed waiting)状态。这一状态将一直保持到朝时期满或者接收到适当的通知。带有超时参数的方法有Thread.sleep和Object.wait、Thread.join、Lock.tryLock以及Condition.await的计时版。
4.Terminated(被终止)
线程因如下两个原因之一而被终止:
(1) 因为run()方法的正常退出而自然死亡。
(2) 因为一个没有捕获的异常终止了run()方法而意外死亡。
注意: 可以调用线程的stop()【已过时】方法杀死一个线程,该方法抛出ThreadDeath错误对象,由此杀死线程。
分享到:
相关推荐
### Java线程:线程状态的转换 #### 一、线程状态及其转换 线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。一个进程中的多个线程共享同一份内存空间,使得线程间的通信...
### MFC的状态模块状态、进程状态、线程状态详解 #### 9.1 模块状态 MFC中的模块状态是指一个可执行程序或使用MFCDLL的动态链接库(DLL)的状态信息。例如,一个OLE控件可以视为一个模块。每个应用程序的模块都有...
1. **线程状态** Delphi中的线程状态主要有以下几个: - **创建(Created)**:线程被创建但尚未开始执行。 - **就绪(Ready)**:线程已分配到CPU资源,等待执行。 - **运行(Running)**:线程正在执行。 - *...
Java线程状态流转图知识点总结 Java线程状态流转图是一种用于描述Java线程生命周期中不同的状态和状态转换的图形表示方式。该图形展示了Java线程从创建到终止的整个生命周期,并详细介绍了每种状态的特点和转换...
Java 线程状态转换图 Java 线程状态转换图是 Java 编程中非常重要的一个概念,它描述了线程在不同的状态之间的转换关系。了解线程状态转换图对 Java 编程的理解和应用非常重要。本文将详细介绍 Java 线程状态转换图...
这个主题“设计滚动字演示线程状态及改变方法”主要涵盖了如何利用Java的多线程特性来实现滚动文字效果,并且管理线程的状态变化。下面我们将详细探讨相关的知识点。 1. **线程基础**: - **线程与进程**:在...
在MFC中,模块状态、进程状态和线程状态是理解MFC应用程序运行机制的关键概念。 模块状态指的是一个可执行程序或使用MFC的DLL的状态。对于一个应用程序来说,每个模块都有自己的状态,包含了如资源加载的实例句柄、...
- 可以使用`GetThreadContext()`,`GetThreadTimes()`,或`QueryThreadCycleTime()`等API查询线程状态。 4. **线程同步**: - 为了确保线程安全,通常需要使用同步机制,如互斥量(`Mutex`)、信号量(`Semaphore...
对于判断线程状态,我们需要设置为`SystemThreadInformation`,这样返回的数据将包含所有系统线程的信息。 当`SystemInformationClass`设置为`SystemThreadInformation`时,`NtQuerySystemInformation`会返回一个`...
java线程从新建到死亡所能经历的各种状态之间的流转。包括运行到阻塞、进入锁池、等待队列,全面而清晰的一张图
标题和描述中提到的知识点是关于线程状态及其在计算机科学中的作用,特别是在Java编程语言中的应用。线程,作为进程中的独立控制流,是现代操作系统(如Mac、Windows NT、Windows 95等)和Java平台的核心概念之一。...
在多线程编程中,了解线程状态是至关重要的,因为这可以帮助我们诊断问题、优化性能并确保程序的正确运行。线程状态是线程在生命周期中的不同阶段,每个阶段都对应着特定的行为和资源使用情况。下面我们将深入探讨...
线程在多线程编程中扮演着至关重要的角色,它们允许程序并发执行多个任务,提高处理器的利用率。在操作系统中,线程分为两...在编写多线程程序时,应根据需求合理选择线程状态,以确保资源的有效利用和程序的正确运行。
本文将深入探讨Java源码中查看线程状态的方法,并通过一个经典的实例来阐述这一过程。 线程在Java中由`java.lang.Thread`类表示,其生命周期包括以下几种状态: 1. **新建**(New):当使用`new Thread()`创建了一...
在探究JVM线程状态以及Thread.sleep的实现原理时,我们首先需要了解Java线程与操作系统线程之间的关系。在Java虚拟机(JVM)中,每个线程通常都是以一对一的关系映射到操作系统线程上的。然而,尽管两者在实现上是...
#### 二、线程状态的控制 为了更好地管理线程的状态,Java提供了一系列的方法来帮助开发者控制线程的状态,主要包括: 1. **`void destroy()`**: - 已过时。最初用于销毁线程,但不进行任何清理工作。可能导致...
Java线程状态转换是Java多线程编程中的关键概念,对于理解和优化并发程序至关重要。Java线程在其生命周期中经历多种状态,这些状态之间的转换是由线程调度器根据特定的策略来决定的。以下是对Java线程状态转换的详细...
#### 三、C++ 调用 Python API 的线程状态 当C++代码需要调用Python代码时,通常通过Python/C API来实现。在这个过程中,理解和管理线程状态变得尤为重要。 - **线程状态的数据结构**:Python解释器为每个线程维护...