关于线程的生命周期状态
线程的生命周期包含5个阶段,包括:新建new、就绪runnable、运行running、阻塞blocked、死亡terminated。
当线程进入运行状态后,一般的操作系统是采用抢占式的方式来让线程获得CPU。所以CPU需要在多条线程之间切换,于是线程状态也会多次在运行、阻塞、就绪之间切换。
但除了传统的五个状态外,线程还有等待状态,在下面都有代码实现。
1. 新建new
NEW(新建状态):新创建后尚未启动的线程处于这种状态。
/**
* 创建线程并获取当前状态
* @param args
*/
public static void main(String[] args) {
System.out.println("TestDemo正在运行,创建一个线程并获取当前状态:"+new Thread().getState());
}
2. 就绪runnable
RUNNABLE(运行状态):Java虚拟机中处于该状态的线程,对应操作系统状态中的Running和Ready,表示该线程正在执行或者等待操作系统分配执行时间。
/**
* 实现Runnable接口创建线程,调用线程获取当前状态
* @author xingyanan01-lhq
*/
public static class TestDemo1 implements Runnable{
@Override
public void run() {
System.out.println("TestDemo1正在运行!当前线程名称"+Thread.currentThread().getName()+"当前线程状态:"+Thread.currentThread().getState());
}
public static void main(String[] args) {
TestDemo1 testDemo = new TestDemo1();
Thread thread = new Thread(testDemo);
thread.start();
}
}
/**
* 继承Thread类可创建线程,调用线程获取当前状态
* @author xingyanan01-lhq
*/
public static class TestDemo2 extends Thread{
@Override
public void run() {
System.out.println("TestDemo2正在运行!当前线程名称"+Thread.currentThread().getName()+"当前线程状态:"+Thread.currentThread().getState());
}
public static void main(String[] args) {
TestDemo2 testDemo = new TestDemo2();
Thread thread = new Thread(testDemo);
thread.start();
}
}