`
春花秋月何时了
  • 浏览: 42448 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

Java线程状态与生命周期

 
阅读更多

线程生命周期示意图:



 

线程的状态:

1. 初始状态(New)

当创建了线程对象实例 即 new Thread(...) 之后,线程进入初始状态,注意这个时候,它还仅仅是一个普通的对象实例,而不是真正的线程,JVM也不会分配相应的资源,例如栈内存空间。

 

2. 可运行状态/就绪状态(Runnable)

调用了start()方法之后,线程位于“可运行线程池”中,变得可运行也即就绪,只等待获取CPU的使用权即在就绪状态的进程除CPU之外,其它的运行所需资源都已全部获得。

 

3. 运行状态(Running)

就绪状态的线程被操作系统选中,获取了CPU时间片,执行程序代码即进入运行状态。

运行状态的线程如果执行了yield()方法,出让了CPU,就会回到就绪状态,这时候与其他线程处于同等竞争状态,但如果操作系统没有忽略线程的优先级设定,那么比该线程优先级高的线程才能获得CPU的调度执行,如果没有则依然会再次调度该线程执行。

 

4. 阻塞状态(Blocked)

线程由于某种原因放弃了CPU使用权,暂时停止执行,即为阻塞状态,阻塞状态的线程必须重新进入就绪状态,才有机会重新转到运行状态。阻塞的情况分下面几种:

(1)、等待阻塞(WAITING):运行的线程执行了wait()方法,JVM释放该线程占用的所有资源,并将其放入“等待队列/等待池”,进入该状态的线程不能自动唤醒,必须依靠其他线程调用notify()或notifyAll()方法才能被唤醒。

(2)、同步阻塞(BLOCKED):运行的线程若在需要获取同步锁(如synchronized等)时,发现同步锁已经被其他线程占用,则JVM会把该线程放入“锁池”中,锁池中以列队的形式(即先到先得)存放着所有正在等待相同同步锁的线程,一旦获得需要的同步锁对象标记,就转入就绪状态。

(3)、其他阻塞(TIMED_WAITING):当运行的线程调用了自身的sleep()方法、或者其他线程的join()方法、或者发生了I/O请求阻塞,JVM会把该线程置为阻塞状态。当sleep()状态超时、join()等待线程终止或者超时、或者I/O处理完毕时,线程重新转入就绪状态。

(4)、线程挂起:运行的线程执行了suspend()方法之后,线程进入阻塞状态,并且不能自动恢复,需要调用其resume()方法,才能使线程重新进入就绪状态。

 

5. 终止状态(Terminated)

 线程执行完了或者因异常退出了run()方法,该线程结束生命周期。

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

相关推荐

    Java线程状态流转图

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

    Java多线程(二)、线程的生命周期和状态控制

    ### Java多线程之线程的生命周期和状态控制 #### 一、线程的生命周期 在Java中,线程的生命周期是指线程从创建到结束的整个过程。根据线程的状态变化,我们可以将线程的生命周期划分为以下几个阶段: 1. **新建...

    java线程状态转换图

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

    Java多线程-线程的生命周期

    Java多线程中,线程的生命周期是编程中必须理解的重要概念。在JDK1.5之前,线程被划分为五个状态,分别是新建(New)、就绪(Runnable)、运行(Running)、阻塞(Blocked)和死亡(Dead)。在JDK1.5及之后,线程的...

    Java线程生命周期.zip

    Java线程生命周期是Java编程中的核心概念,它关乎程序的并发执行和性能优化。线程在Java中扮演着至关重要的角色,特别是在多任务处理和实时系统中。理解线程的生命周期有助于开发者更有效地管理和控制程序运行流程。...

    Java线程的生命周期和状态控制[定义].pdf

    Java线程的生命周期和状态控制是Java多线程编程中的核心概念。线程的状态转换是理解线程行为的关键,这包括新建状态、就绪状态、运行状态、阻塞状态和死亡状态。 1. 新建状态:当使用`new`关键字创建了一个`Thread`...

    设计滚动字演示线程状态及改变方法

    这个主题“设计滚动字演示线程状态及改变方法”主要涵盖了如何利用Java的多线程特性来实现滚动文字效果,并且管理线程的状态变化。下面我们将详细探讨相关的知识点。 1. **线程基础**: - **线程与进程**:在...

    Java 线程的生命周期完整实例分析

    在 Java 中,我们可以使用 Thread 的状态来判断线程的生命周期。Thread 的状态包括 NEW、RUNNABLE、RUNNING、WAITING、BLOCKED 和 DEAD 等。 在本文的实例中,我们使用了五个线程来展示 Java 线程的生命周期。每个...

    Java线程详解大全

    本文将深入探讨Java线程的概念、生命周期、实现方式以及相关的同步机制。 首先,理解线程的基本概念至关重要。线程是程序中一个单一的顺序控制流,它在程序的上下文中运行,但具有独立的执行路径。多线程则是指在...

    4初学Java多线程:线程的生命周期.pdf

    在探讨Java多线程和线程生命周期时,我们首先应该明确,Java多线程是Java语言支持并发编程的一个重要特性,其允许同时执行多个任务,以提高程序的执行效率和改善用户体验。Java中的每个线程都有自己的生命周期,由一...

    Java线程状态转换.pdf

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

    java线程.pdf

    ### Java线程生命周期 Java线程有五种基本状态:新建(New)、就绪(Runnable)、运行(Running)、阻塞(Blocked)和死亡(Terminated)。线程的状态会随着程序的运行而变化: 1. **新建**:当创建了一个新的线程...

    java线程与并发编程实践

    线程的生命周期包括新建、就绪、运行、阻塞和终止五种状态,Java API提供了start()、sleep()、join()、yield()、interrupt()等方法来控制线程状态。 并发编程的核心挑战在于线程间的同步与通信。Java提供了一系列...

    浅析Java语言中线程的生命周期及实现方式.pdf

    目前线程在以Java语言为基础的软件项目开发中使用的越来越频繁,它从生成到结束有一个完整的生命周期,在这个周期中线程的状态是可以进行相互的转换。 线程的生命周期 线程的生命周期分为五个阶段:新建、就绪、...

    Java多线程知识点总结

    在Java中,线程的生命周期包含五个基本状态,分别是新建状态(New)、就绪状态(Runnable)、运行状态(Running)、阻塞状态(Blocked)和死亡状态(Dead)。了解这些状态对于掌握Java多线程编程至关重要。 新建...

    图解Java线程的生命周期

    理解Java线程的生命周期对于编写高效且无错误的多线程代码至关重要。线程的生命周期包括五个关键阶段:新建(New)、就绪(Runnable)、运行(Running)、阻塞(Blocked)和死亡(Dead)。 1. 新建(New): 当通过...

    Java 线程的生命周期详细介绍及实例代码

    Java线程的生命周期是每个Java多线程开发者必须了解的重要概念。线程在它的整个生命周期中会经历五个基本状态:新建(New)、就绪(Runnable)、运行(Running)、阻塞(Blocked)和死亡(Dead)。接下来,我们将...

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

    线程在Java中由`java.lang.Thread`类表示,其生命周期包括以下几种状态: 1. **新建**(New):当使用`new Thread()`创建了一个线程对象时,线程处于新建状态。 2. **可运行**(Runnable):调用`start()`方法后,...

    Java线程的生命周期和状态控制_动力节点Java学院整理

    "Java线程的生命周期和状态控制" Java线程的生命周期是指从线程创建到线程结束的整个过程,而状态控制是指线程在不同的状态之间的转换。Java线程的生命周期主要包括五个状态:新建状态、就绪状态、运行状态、阻塞...

    (完整版)Java程序设计任务驱动式教程-任务二十八-线程的生命周期与优先级(线程的状态与调度).ppt

    【Java线程生命周期与优先级】 在Java程序设计中,线程是程序执行的独立路径,它使得程序可以并发地执行多个任务。线程的生命周期包括五个基本状态:新建(New)、就绪(Runnable)、运行(Running)、阻塞(Blocked...

Global site tag (gtag.js) - Google Analytics