美文网首页Java并发
线程的生命周期,状态是如何转移的

线程的生命周期,状态是如何转移的

作者: CodeKing2017 | 来源:发表于2018-08-08 13:56 被阅读34次

在 Java 语言中,一个线程从其创建、启动到其运行结束的整个生命周期可能经历若干状态,如图所示。

Java线程的状态可以使用监控工具查看,也可以通过Thread.getState()调用来获取。 Thread.getState()的返回值类型 Thread.State 是一个枚举类型(Enum)。Thread.State所定义的线程状态包括以下几种。

NEW:一个已创建而未启动的线程处于该状态。由于一个线程实例只能够被启动一次,因此一个线程只可能有一次处于该状态。

RUNNABLE:该状态可以被看成一个复合状态 。它包括两个子状态:READY 和 RUNNING。前者表示处于该状态的线程可以被线程调度器( Scheduler ) 进行调度而使之处于 RUNNING 状态 。后者表示处于该状态的线程正在运行,即相应线程对象的 run 方法 所对应的指令正在由处理器执行。执行Thread.yield()的线程,其状态可能会由RUNNING 转换为 READY。处于 READY 子状态的线程也被称为活跃线程。

BLOCKED:一个线程发起一个阻塞式I/O(Blocking I/O )操作后,或者申请一个由其他线程持有的独占资源(比如锁)时,相应的线程会处于该状态。处于BLOCKED 状态的线程并不会占用处理器资源。当阻塞式I/O操作完成后,或者线程获得了其申请的资源,该线程的状态又可以转换为RUNNABLE。

WAITING:一个线程执行了某些特定方法之后就会处于这种等待其他线程执行另外一些特定操作的状态。能够使其执行线程变更为 WAITING 状态的方法包括:Object.wait () 、 Thread.join()和 LockSupport.park(Object)。能够使相应线程从 WAITING 变更为 RUNNABLE 的相应方法包括 :Object.notify()/notify All()和 LockSupport. Unpark(Object)。

TIMED WAITING:该状态和WAITING 类似,差别在于处于该状态的线程并非无限制地等待其他线程执行特定操作,而是处于带有时间限制的等待状态。当其他线程没有在指定时间内执行该线程所期望的特定操作时,该线程的状态自动转换为RUNNABLE。

TERMINATED:已经执行结束的线程处于该状态。由于一个线程实例只能够被启动一次,因此一个线程也只可能有一次处于该状态。Thread.run()正常返回或者由于抛出异常而提前终止都会导致相应线程处于该状态。

一个线程在其整个生命周期中,只可能有一次处于NEW状态和 TERMINATED 状态。

相关文章

  • Java知识梳理六

    一、Java多线程一 1.谈谈线程的生命周期和状态转移 关于线程生命周期的不同状态,在Java 5以后,线程...

  • 线程的生命周期,状态是如何转移的

    在Java语言中,一个线程从其创建、启动到其运行结束的整个生命周期可能经历若干状态,如图所示。 Java线程的状态...

  • 线程的学习总结

    我打算从线程得生命周期开始总结多线程: 线程的生命周期: 新建状态:线程对象创建之后,线程进入新建状态. 就绪状态...

  • 图解Java多线程设计模式 笔记

    线程的状态转移图

  • 多线程-线程生命周期

    线程总共有6个生命周期状态,线程状态可以通过thread.getState()查看 线程状态是Thread.Sta...

  • Kotlin线程(3)线程状态

    在线程的生命周期中,线程会有5种状态。 新建状态新建状态(New)是通过实例化 Thread 创建线程对象,它仅仅...

  • 我的涂床

    线程状态及生命周期

  • Thread相关学习之二 - JavaThread&JV

    线程生命周期 JavaThread生命周期 线程生命周期就在上述的6个状态中流转,如下图: JVMTIThread...

  • 【问答】Java多线程

    线程的状态,画一个线程的生命周期状态图 线程状态:NEW,未启动的线程;RUNNABLE,运行中,包括就绪状态和运...

  • java多线程基本概念(一)

    线程生命周期 说明线程工共包含5个状态: 新建状态new:调用线程构造方法创建线程后,线程进入新建状态; 就绪状态...

网友评论

    本文标题:线程的生命周期,状态是如何转移的

    本文链接:https://www.haomeiwen.com/subject/wsatbftx.html