Thread的生命周期

概述

  • Java的Thread生命周期中有几个状态?
  • Java的Thread生命周期中的状态是怎么转换的?

Java的Thread生命周期中有6个状态

参考JDK API 1.8 java.lang.Thread.State

  • NEW 新建状态,还没有执行Thread.start()方法时所处的状态
  • RUNNABLE 可执行状态,在等待系统资源,比如处理器
  • BLOCKED 阻塞状态,线程在同步代码块中等待获取锁
  • WAITING 等待状态,当线程调用了如下的方法时就会进入该状态,比如:调用Object.wait()没有超时, Thread.join()没有超时, LockSupport.park()
  • TIMED_WAITING 超时等待状态,当线程调用了如下的方法时就会进入该状态,比如:调用Object.wait(long), Thread.join(long), LockSuport.parkNanos(), LockSupport.parkUntil()
  • TERMINATED 终止状态,线程运行完run()方法之后就会进入该状态

这里有个疑问: 为什么BLOCKED状态是在线程调用了Objcet.wait()方法之后进入的,而WAITING状态也是线程调用Object.wait()方法进入的,那当线程调用Object.wait()方法之后是进入BLOCKED状态呢,还是进入WAITING状态呢?

Java的Thread生命周期中的状态是怎么转换的?

参考链接

https://www.zhihu.com/question/27654579