Java线程状态

Java线程状态

在操作系统层面线程有5种状态

  1. 新建状态(New)
    线程创建,但没有启动
    新建状态->就绪状态:线程启动
  2. 就绪状态(Ready)
    线程启动,但还没有获得CPU时间片
    就绪状态->运行状态:线程获得时间片,被CPU执行
  3. 运行状态(Runninng)
    线程被CPU执行
    运行状态->就绪状态:线程时间片耗尽或者主动放弃当次时间片
  4. 阻塞状态(Blocked)
    同步阻塞:线程尝试获得某个对象的锁但无法获得,线程进入锁池,等待锁被释放
    等待阻塞:线程主动放弃对象的锁(Object的wait方法),等待对象的通知(Object的notify或notifyAll方法)。线程被通知后需要竞争获得锁后才能回到就绪状态
    其他阻塞:线程进入休眠状态,等待条件达成。如I/O请求,sleep,join
  5. 终止状态(Terminated)
    线程任务结束或异常退出

在JVM层面Java的线程有6种状态

  1. 新建状态(New)
    对应操作系统的New
  2. 可运行状态(Runnable)
    对应操作系统的Ready和Running,还包括其他阻塞中的等待I/O请求
  3. 阻塞状态(Blocked)
    对应操作系统的同步阻塞
  4. 等待状态(Waiting)
    对应操作系统的等待阻塞和其他阻塞中的join(不带时间)
  5. 超时时等待状态(TimedWaiting)
    对应操作系统的等待阻塞和其他阻塞中的join,sleep(带时间)
  6. 终止状态(Terminated)
    对应操作系统的Terminated

Java线程状态_第1张图片

你可能感兴趣的:(多线程,java)