概述
- 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状态呢?