`
在水伊方
  • 浏览: 111486 次
  • 性别: Icon_minigender_1
  • 来自: 福州
社区版块
存档分类
最新评论

Java线程状态

 
阅读更多

下面是Java线程的状态图

 

1、创建状态

当我们通过new操作符创建一个新的线程对象时,该线程处于创建状态。此时,它已经有了相应的内存空间和其它资源,但还处于不可运行状态,通过调用start方法进入就绪状态。

注意:不能对已经启动的线程再次调用start()方法,否则会出现java.lang.IllegalThreadStateException异常

 

2、就绪状态

处于就绪状态的线程已经具备了运行条件,但还没有分配到CPU进入线程就绪队列(尽管是采用队列形式,事实上,把它称为可运行池而不是可运行队列。因为CPU的调度不一定是按照先进先出的顺序来调度的),等待系统为其分配 CPU。等待状态并不是执行状态,当系统选定一个等待执行的Thread对象后,它就会从等待执行状态进入执行状态,系统挑选的动作称之为“CPU调度”。一旦获得CPU,线程就进入运行状态并自动调用自己的run方法。

 

3、运行状态

当就绪状态的线程被调用并获得处理器资源时,线程就进入了运行状态。此时,自动调用该线程对象的run()方法。run()方法定义了该线程的操作和功能。处于运行状态的线程可以变为阻塞状态、就绪状态和死亡状态。

 

当发生如下情况是,线程会从运行状态变为阻塞状态:

①、线程调用sleep方法主动放弃所占用的系统资源

②、线程调用一个阻塞式IO方法,在该方法返回之前,该线程被阻塞

③、线程试图获得一个同步监视器,但更改同步监视器正被其他线程所持有

④、线程在等待某个通知(notify)

⑤、程序调用了线程的suspend方法将线程挂起。不过该方法容易导致死锁,所以程序应该尽量避免使用该方法。

 

当线程的run()方法执行完,或者被强制性地终止,例如出现异常,或者调用了stop()、desyory()方法等等,就会从运行状态转变为死亡状态。

 

4、阻塞状态

一个正在执行的线程在某些特殊情况下,如被人为挂起或需要执行耗时的输入输出操作时,将让出CPU并暂时中止自己的执行,进入堵塞状态。在可执行状态下,如果调用sleep()、suspend()、wait()等方法,线程都将进入堵塞状态。堵塞时,线程不能进入排队队列,只有当引起堵塞的原因被消除后,如睡眠时间已到,或等待的I/O设备空闲下来,线程便转入就绪状态,重新到就绪队列中排队等待,被系统选中后从原来停止的位置开始继续运行。

 

5、死亡状态

当线程的run()方法执行完,或者被强制性地终止,就认为它死去。这个线程对象也许是活的,但是,它已经不是一个单独执行的线程。线程一旦死亡,就不能复生。 如果在一个死去的线程上调用start()方法,会抛出java.lang.IllegalThreadStateException异常。

  • 大小: 15.4 KB
分享到:
评论

相关推荐

    Java线程状态流转图

    Java线程状态流转图知识点总结 Java线程状态流转图是一种用于描述Java线程生命周期中不同的状态和状态转换的图形表示方式。该图形展示了Java线程从创建到终止的整个生命周期,并详细介绍了每种状态的特点和转换...

    java线程状态转换图

    Java 线程状态转换图 Java 线程状态转换图是 Java 编程中非常重要的一个概念,它描述了线程在不同的状态之间的转换关系。了解线程状态转换图对 Java 编程的理解和应用非常重要。本文将详细介绍 Java 线程状态转换图...

    Java线程状态转换.pdf

    Java线程状态转换是Java多线程编程中的关键概念,对于理解和优化并发程序至关重要。Java线程在其生命周期中经历多种状态,这些状态之间的转换是由线程调度器根据特定的策略来决定的。以下是对Java线程状态转换的详细...

    Java学习教程-探究JAVA线程状态及转化视频

    Java线程是并发编程的核心部分,...总的来说,Java线程状态和转换是Java并发编程的基础,对于提升软件的并发性和响应性具有重要意义。通过本教程的视频学习,你将能更深入地理解这些概念,并能够在实际开发中灵活运用。

    JAVA线程状态

    了解和理解JAVA线程状态:对于JAVA初学者来说,有作用。

    Java线程状态转换关系实例解析

    Java线程状态转换关系实例解析 Java线程状态转换关系实例解析是Java多线程编程中的一种重要概念,它指的是Java线程在不同的状态之间的转换关系。了解这些状态转换关系可以帮助开发者更好地编写多线程程序,避免线程...

    java线程状态图

    java线程从新建到死亡所能经历的各种状态之间的流转。包括运行到阻塞、进入锁池、等待队列,全面而清晰的一张图

    Java线程:线程状态的转换

    ### Java线程:线程状态的转换 #### 一、线程状态及其转换 ...通过以上分析,我们可以看到Java线程状态转换的基本原理以及如何利用线程状态来控制线程的行为,这对于开发高性能、高可靠性的并发程序至关重要。

    java线程的状态2---马克-to-win java视频

    java线程的状态3---马克-to-win java视频的详细描述与介绍

    Java 线程状态、线程池

    java 线程状态、线程池 1. java 的线程状态 状态 发生条件 NEW 线程刚刚被创建,没有启动,没有调用start方法 RUNNABLE(可运行) 线程已经在JVM中运行,但是是否运行不确定,看当前线程是否由CPU执行权 ...

    Java线程状态及切换、关闭线程的正确姿势分享

    "Java线程状态及切换、关闭线程的正确姿势分享" 本文将详细介绍Java线程状态及切换、关闭线程的相关内容。线程状态及切换是Java多线程编程中一个非常重要的概念,掌握线程状态及切换是编写高效、稳定、可靠的多线程...

    Java源码查看线程的运行状态.rar

    在Java编程中,线程是程序执行的基本单元,它允许应用程序同时执行多个任务。了解如何查看线程的运行状态对于调试和性能优化...通过阅读和分析源码,我们可以更深入地了解Java线程的工作原理,从而提升我们的编程技能。

    Java线程:线程状态的转换.pdf

    在Java编程中,线程是并发执行任务的...总之,理解和掌握Java线程状态的转换以及如何控制线程执行是编写高效并发程序的关键。通过适当的方法,我们可以控制线程的执行顺序,实现线程间的同步和协作,从而优化程序性能。

    Java线程状态运行原理解析

    Java线程状态运行原理解析 Java线程状态运行原理解析是Java编程语言中一个非常重要的概念,涉及到线程的生命周期、状态转换、线程间通信等方面。下面我们将对Java线程状态运行原理进行详细的分析和解释。 线程状态...

    Java 线程状态和等待唤醒机制和线程池的实现

    Java 线程状态和等待唤醒机制和线程池的实现 Java 中线程状态可以分为六种:新建状态(New)、就绪状态(Runnable)、运行状态(Running)、休眠状态(Sleeping)、等待状态(Waiting)和死亡状态(Dead)。在 Java...

    JVM线程状态和Thread.sleep的实现原理探究.pdf

    值得注意的是,Java线程状态SLEEPING还包含了等待(WAITING)和带超时的等待(WAITING_WITH_TIMEOUT)状态,这是因为Java提供了更加丰富的线程状态抽象,从而帮助开发者更好地理解和控制线程行为。 此外,Java中的...

    Java线程状态变换过程代码解析

    理解Java线程状态的变化对于编写并发程序至关重要,它帮助开发者预测和控制线程的行为,避免死锁、饥饿等问题。正确使用线程状态转换方法如`yield()`和`join()`,可以提高程序的并发性能和可维护性。

    Java多线程运算集合

    #### 四、Java线程状态的转换 - **线程状态**: - Java线程有多种状态:新建 (`NEW`)、就绪 (`RUNNABLE`)、阻塞 (`BLOCKED`)、等待 (`WAITING`)、超时等待 (`TIMED_WAITING`) 和终止 (`TERMINATED`)。 - **状态...

    java线程.pdf

    Java线程有五种基本状态:新建(New)、就绪(Runnable)、运行(Running)、阻塞(Blocked)和死亡(Terminated)。线程的状态会随着程序的运行而变化: 1. **新建**:当创建了一个新的线程对象后,该线程处于新建...

    java线程分析工具TDA

    TDA(Thread Dump Analyzer)是一款强大的Java线程分析工具,它能够帮助开发者深入理解应用在运行时的线程状态,包括线程的阻塞情况、等待资源、死锁等问题。下面将详细介绍TDA的使用方法、功能以及它如何帮助我们...

Global site tag (gtag.js) - Google Analytics