Java线程有哪些状态?状态如何转换?
线程可以拥有自己的操作栈、程序计数器、局部变量表等资源,它与同一进程内的其他线程共享该进程的所有资源。Java的线程有自己的生命周期,在 Java 中线程的生命周期中一共有 6 种状态。
- New
- Runnable
- Blocked
- Waiting
- Timed Waiting
- Terminated
下面看个图
上图通过箭头说明了Java线程状态的转换方向。线程创建后,其状态为New,从New到Runnable说明程序处于一种可运行状态。注意,可运行状态不一定就是在运行,因为CPU时间片是由操作系统分配的,只有操作系统给线程分配了CPU时间片,这条线程才真正的Running。所以Runnable可简单分为Ready与Running两种状态。由New到Runnable再到Terminated,这几个状态是不可逆的。面Runnable到Blocked、或是Timed Waiting、Waiting这几个状态却是可流转的,也就是这几个状态是可多次转换的。下面更详细的描述这六个状态及其转换
New状态
如下代码
public class RunnableThread implements Runnable {
@Override
public void run() {
System.out.println("线程运行,ThreadName:" + Thread.currentThread().getName())