zoukankan      html  css  js  c++  java
  • JAVA线程的生命周期状态

    一、线程的生命周期图示

    avatar

    二、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()正常返回或者在执行过程中抛出异常都有可能使线程处于此状态。

  • 相关阅读:
    代腾飞(为自己名字作诗)
    愈到老愈受用:人生成功生涯规划100诀
    漫步白沫江畔有感
    成功自有成功的方法和道理(一堂价值百万的课)
    你的终点在哪里?决定成功与否的十种智力
    为你痴狂
    苏竹青(帮别人名字作诗)
    何韵仪(帮别人名字作诗)
    腹有诗书又如何
    漫步茶马古道有感
  • 原文地址:https://www.cnblogs.com/kobelieve/p/11296103.html
Copyright © 2011-2022 走看看