美文网首页
线程状态

线程状态

作者: caster | 来源:发表于2021-03-16 17:26 被阅读0次

    java线程与操作系统线程状态略有不同。

    1. 操作系统底层线程状态:

    课本经典五状态:


    计算机操作系统线程状态

    2. JAVA线程状态:

    JAVA线程状态:指的是java线程类中的状态枚举,如下:

    package java.lang;
    public class Thread implements Runnable {
        public enum State {
            NEW,
            RUNNABLE,//
            BLOCKED,
            WAITING,
            TIMED_WAITING,
            TERMINATED;
        }
    }
    
    Thread.State 说明
            NEW         线程尚未start()
    RUNNABLE 处于JVM级别运行状态;系统级别可能在等待处理器调度或已正在运行
    BLOCKED 正在竞争monitor lock(阻塞于锁),用来进入或是重新进入(调用过wait()方法)synchronized方法、块
    WAITING 线程调用了Object.wait()、Thread.join()或者LockSupport.park方法进入了waiting状态。等待状态的线程正在等待另一个线程执行特定的动作显示唤醒它:wait等notify,join等指定线程终止。被唤醒就进入BLOCKED状态
    TIMED_WAITING 相比WAITING多了超时自动唤醒,调用以下方法之一实现:Thread.sleep Object.wait(long) Thread.join(long) LockSupport.parkNanos LockSupport.parkUntil
    TERMINATED 终止线程的线程状态。 线程已完成执行

    RUNNABLE细分状态:
    1. Ready

    • 已就绪,等待处理器调度
    • 调用start()方法后进入就绪状态
    • 当前线程 sleep() 方法结束,其他线程 join() 结束,等待用户输入完毕,某个线程拿到对象锁等,也将进入就绪状态
    • 当前线程时间片用完了,调用当前线程的 yield()方法,当前线程进入就绪状态
    • 锁池里的线程拿到对象锁后(BLOCKED状态获取到lock后),进入就绪状态

    2. Running

    • 处理器正在运行该线程

    3. 一小部分Blocked

    • JVM 并不关心操作系统线程的实际状态,从 JVM 看来,等待CPU使用权(操作系统状态为可运行态-Ready)与等待 I/O(操作系统处于等待状态)没有区别,都是在等待某种资源,所以都归入RUNNABLE 状态。


      java线程状态

    java的RUNNABLE对应操作系统的就绪和运行状态。
    java的BLOCKED,WAITING,TIMED_WAITING对应操作系统的阻塞/挂起状态。

    相关文章

      网友评论

          本文标题:线程状态

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