目录
1.线程的生命周期
1.六大状态:
- 线程状态。 线程可以处于以下状态之一:
NEW
尚未启动的线程处于此状态。RUNNABLE
在Java虚拟机中执行的线程处于此状态。BLOCKED
被阻塞等待监视器锁定的线程处于此状态。WAITING
正在等待另一个线程执行特定动作的线程处于此状态。TIMED_WAITING
正在等待另一个线程执行动作达到指定等待时间的线程处于此状态。TERMINATED
已退出的线程处于此状态。
2.线程状态转换图
我们new一个线程,那么线程就处于一个new被创建的状态,然后我们调用start()方法后,就是进入了可运行状态(Runnable 状态),Runnable状态细分为两个状态Ready状态和Running状态。下面就是我们的用户态。这里如果将Runnable状态细分为两个状态那么就是7个状态,不然就是上面写的六个。然后在运行过程中我们调用了不同的方法,我们会进入不同的状态。当线程结束以后,我们就进入了结束状态TERMINATED
,
代码 :
public class ThreadState_ {
public static void main(String[] args) throws InterruptedException {
TS ts = new TS();
System.out.println(ts.getName()+" 状态 "+ts.getState());
ts.start();
while (Thread.State.TERMINATED!=ts.getState()){
System.out.println(ts.getName()+" State "+ts.getState());
Thread.sleep(500);
}
System.out.println(ts.getName()+" 状态 "+ts.getState());
}
}
class TS extends Thread{
@Override
public void run() {
while (true){
for (int i = 0; i < 10; i++) {
System.out.println("t t t t t t ");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
break;
}
}
}
结果如下:
开始,我们从New状态,通过start方法 进入了RUNNABLE状态,然后我们可以看到在sleep的作用下,我们线程进入了超时等待。最后结束的时候,我们进入了TERMINATED状态。