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错误对象,由此杀死线程。
分享到:
相关推荐
MFC 定义了多种状态信息,这里要介绍的是模块状态、进程状态、线程状态。这些状态可以组合在一起,例如 MFC 句柄映射就是模块和线程局部有效的,属于模块-线程状态的一部分。
delphi判断线程状态
初学者学习java多线程的必备良师啊!...内容包含:线程的状态及状态之间的转换 线程的优先级 线程的几大常用方法! 申明: 本文出自 “熔 岩” 博客,本人从百度文库转载而来! 大家都尊重一下 作者的版权!
设计滚动字演示线程状态及改变方法
Java线程状态流转图
java线程状态之间的转换图,包含转换的一些条件
java线程从新建到死亡所能经历的各种状态之间的流转。包括运行到阻塞、进入锁池、等待队列,全面而清晰的一张图
线程状态图 包含了从创建到消亡的各种流程以及所有状态
MFC属于模块-线程状态的一部分.DOC
NtQuerySystemInformation判断线程是否被挂起/判断线程状态
vc中获取一个线程的状态及返回值,VS2012工程,通过点击界面上按钮,启动一个判断线程,然后再这个判断线程启动一个工作线程,在判断线程里判断工作线程的工作状态
多线程线程状态转换图
应用程序可以有多个线程,这些线程在休眠状态中需要耗费大量时间来等待事件发生。其他线程可能进入睡眠状态,并且仅定期被唤醒以轮循更改或更新状态信息,然后再次进入休眠状态。为了简化对这些线程的管理,.NET框架...
检测线程状态,可以跟踪多线程编程中线程的状态,用于调试代码
day17_线程创建、线程同步、线程状态.pdf
java线程的状态3---马克-to-win java视频的详细描述与介绍
无论是通过 Thread 类直接实例化对象创建线程,还是通过继承自 Thread 类的子类实例化创建线程,新创建的线程在调用 start() 方法之前,不会得到执行,此阶段的线程就处于新建状态。 线程的就绪状态 当位于新建状态...