线程状态变迁

操作系统中线程/进程状态的变迁

                        图一

新的:刚创建一个新的线程还没执行相应的start方法。
    就绪态:线程执行所需要的资源都已经满足了,就差CPU分配的时间片了
运行态:正在使用CPU时间片执行代码
等待:正在等待获取某些资源或某个事件的发生
终止:执行完程序

运行态——》就绪态:CPU分配的时间片到了,操作系统给出一个中断,对该线程进行上下文切换,使其进入就绪态。
就绪态——》运行态:拿到CPU时间,从PCB载入上次执行的信息,继续 运行程序
运行——》等待:正在运行的程序需要获取额外的资源如:锁,I/O.或某个事件的发生。
    等待——》就绪:已经获取到运行所需要的资源。

JAVA 中线程状态的变迁

图二

java 中线程状态的变迁细化了操作系统的状态的变迁。多了阻塞态,和超时等待。进入阻塞态的线程是想进入同步块。至于JVM为何要这样定义其线程的状态,我想可能是为了编程人员更好的操作线程吧。


图一:来源于《操作系统概念第七版》
图二:来源于《Java并发编程的艺术》

时间: 2024-09-20 00:11:54

线程状态变迁的相关文章

服务器备份-bacula备份的内容无法恢复,sd线程状态显示如下

问题描述 bacula备份的内容无法恢复,sd线程状态显示如下 Device status: Device "FileStorage" (/tmp/backup) is not open. Used Volume status:

mysql processlist 线程状态(备查)

mysql processlist线程状态 今天遇见Creating sort index 忘了是什么状态,记录以备查. Analyzing 线程是对MyISAM 表的统计信息做分析(例如, ANALYZE TABLE ). checking permissions 线程是检查服务器是否具有所需的权限来执行该语句. Checking table 线程正在执行表检查操作. cleaning up 线程处理一个命令,并正准备以释放内存和重置某些状态变量. closing tables 线程是改变表中

Java线程状态

线程跟人类一样拥有自己的生命周期,一条线程从创建到执行完毕的过程即是线程的生命周期,此过程可能在不同时刻处于不同的状态,线程状态正是这小节的主题,线程到底有多少种状态?不同状态之间是如何转化的? 对于线程的状态的分类并没有严格的规定,只要能正确表示状态即可,如图2-5-7-1,先看其中一种状态分类,一个线程从创建到死亡可能会经历若干个状态,但在任意一个时间点线程只能处于其中一种状态,总共包含五个状态:新建(new).可运行(runnable).运行(running).非可运行(not runna

《C#多线程编程实战(原书第2版)》——1.6 检测线程状态

1.6 检测线程状态 本节将描述一个线程可能会有哪些状态.获取线程是否已经启动或是否处于阻塞状态等相应信息是非常有用的.请注意由于线程是独立运行的,所以其状态可以在任何时候被改变. 1.6.1 准备工作 为了学习本节,你需要安装Visual Studio 2015.除此之外无需其他准备.本节的源代码放置在BookSamplesChapter1Recipe5目录中. 1.6.2 实现方式 请执行以下步骤来了解如何确定线程状态及获取线程相关的信息. 1.启动Visual Studio 2015.创建

Java并发编程系列之二:线程状态

线程的状态一共有6种,在任意时刻线程的状态只能是其中的一种.正确理解线程的状态有助于我们更容易理解线程.具体的线程状态如下: 状态名称 说明 NEW 初始状态,线程被构建,但是还没有调用start方法 RUNNING 运行状态 BLOCKED 阻塞状态,表示线程阻塞于锁 WAITING 等待状态,表示线程线程进入等待状态,进入该状态后需要其他线程做出通知动作 TIME_WAITING 超时等状态状态,该状态与WAITING不同,它是可以在指定时间内自行返回的 TERMINATED 终止状态,表示

如何使用jstack分析线程状态

背景 记得前段时间,同事说他们测试环境的服务器cpu使用率一直处于100%,本地又没有什么接口调用,为什么会这样?cpu使用率居高不下,自然是有某些线程一直占用着cpu资源,那又如何查看占用cpu较高的线程?   当然一个正常的程序员不会写出上述代码,这里只是为了让一个线程占用较高的cpu资源. top命令 在linux环境下,可以通过top命令查看各个进程的cpu使用情况,默认按cpu使用率排序   1.上图中可以看出pid为23344的java进程占用了较多的cpu资源:2.通过top -H

线程状态及属性

线程一共有六种状态 New (新创建) Runnable (可运行) Blocked (被阻塞) Waiting (等待) Timed waiting (计时等待) Terminated (被终止) 可以通过调用 getState 方法,获取一个线程的当前状态 New 基础且常用的创建线程的方式有两种:继承 Thread 类 和 实现 Runnable 接口 这两种方法各有所长,不过不推荐使用继承 Thread 类的方法,因为: Java单继承机制使得继承 Thread 类后无法再继承其他父类

实例解析C++/CLI线程之线程状态持久性

其他形式的同步 我们可使用类Monitor与类Thread中的某些函数,直接控制线程的同步,请看例1. 例1: using namespace System; using namespace System::Threading; int main() { /*1*/ MessageBuffer^ m = gcnew MessageBuffer; /*2a*/ ProcessMessages^ pm = gcnew ProcessMessages(m); /*2b*/ Thread^ pmt =

Linux下多线程查看工具(pstree、ps、pstack),linux命令之-pstree使用说明, linux 查看线程状态。 不指定

0.最常用 pstree:[root@iZ25dcp92ckZ temp]# pstree -a|grep multe  |       |   `-multepoolser  |       |       `-multepoolser  |       |           `-2*[{multepoolser}] 1. > top 可以显示所有系统进程 按u, 再输入相应的执行用户名称,比如Tom 可以看到Tom用户启动的所有进程和对应的pid 2. > pstack pid 可以看到