加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

JAVA线程的生命周期状态

发布时间:2020-12-15 05:29:13 所属栏目:Java 来源:网络整理
导读:一、线程的生命周期图示 二、Java线程的状态 2.1 Thread里的枚举State 在Java.lang.Thread里,有个内部枚举: State,一个线程在某一时刻可以是State里的一种状态。 public enum State { /** * 线程还没有被启动(start)的状态 */ NEW,/** * 线程可以被JVM执

一、线程的生命周期图示

二、Java线程的状态

2.1 Thread里的枚举State

在Java.lang.Thread里,有个内部枚举: State,一个线程在某一时刻可以是State里的一种状态。

public enum State {

        /**
         * 线程还没有被启动(start)的状态
         */
        NEW,/**
         * 线程可以被JVM执行的状态
         */
        RUNNABLE,/**
         * 线程由于监控锁被阻塞的状态
         */
        BLOCKED,/**
         * 线程被无限期等待的状态
         */
        WAITING,/**
         * 线程等待指定的时间
         */
        TIMED_WAITING,/**
         * 线程被终止的状态 
         */
        TERMINATED;
    }

2.2 NEW

已经创建了一个线程,但是还未被启动的状态。由于一个线程实例只能被启动一次,因此每个线程在线程的生命周期中只可能有一次处于NEW状态。

2.3 RUNNABLE

其实当线程处于RUNNABLE状态的时候,并不代表该线程已经在运行了。我们可以拆分成两个状态:READY和RUNNING。前者表示可以被线程调度器进行调度而处于RUNNING状态。后者表示该线程正在运行,如果在运行过程中,执行了Thread.yield(),其状态可能又变成了READY状态。

2.4 BLOCKED

一个线程发起了阻塞式I/O操作后,或者申请了一个已经被其他线程占有的独占锁时候,会处于BLOCKED状态。该状态下的线程并不会占用资源处理器。当阻塞式I/O操作完成后,或者其获取到独占锁的时候,就会变成RUNNABLE状态。

2.5 WAITING

一个线程执行了某些特定方法后,就会处于这种等待其他线程执行完另外一些特定操作的状态。

2.6 TIMED_WAITING

和WAITING状态类似,只不过该状态不会无限期等待其他线程执行完另外一些操作而已,而是到时间就会自动转化成RUNNABLE状态。

2.7 TERMINATED

已经结束的线程处于此种状态。一个线程实例只能被启动一次,也就意味着一个线程在线程的生命周期中只可能有一次处于TERMINATED状态。Thread.run()正常返回或者在执行过程中抛出异常都有可能使线程处于此状态。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读