线程状态
简介
线程从新生到死亡的不同阶段。
阶段
- NEW
线程刚刚创建,还没有启动。 - RUNNABLE
可运行状态,由线程调度器可以安排执行。 - WAITING
等待被唤醒。 - TIMED WAITING
隔一段时间后自动唤醒。 - BLOCKED
被阻塞,正在等待锁。 - TERMINATED
线程结束
代码
public static class MyThread extends Thread{
@Override
public void run() {
System.out.println("线程状态2: "+this.getState());//RUNNABLE
try {
TimeUnit.SECONDS.sleep(2);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public static void MyThreadTwo() {
synchronized (ThreadState.class){
try {
// System.out.println("线程名:"+Thread.currentThread().getName()+new Date());
TimeUnit.SECONDS.sleep(3);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public static void MyThreadThree() {
try {
LockSupport.park();
TimeUnit.SECONDS.sleep(3);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public void comp() throws InterruptedException {
MyThread myThread = new MyThread();
//NEW
System.out.println("线程状态1: "+myThread.getState());
myThread.start();
TimeUnit.SECONDS.sleep(1);
//MyThread线程执行完成后,主线程再执行
//TIMED_WAITING
System.out.println("线程状态44: "+myThread.getState());
//myThread线程执行结束,主线程再执行
myThread.join();
//TERMINATED
System.out.println("线程状态33: "+myThread.getState());
Thread t2 = new Thread(ThreadState::MyThreadTwo, "t2");
Thread t3 = new Thread(ThreadState::MyThreadTwo, "t3");
Thread t4 = new Thread(ThreadState::MyThreadThree, "t4");
t2.start();
TimeUnit.SECONDS.sleep(1);
t3.start();
t4.start();
TimeUnit.SECONDS.sleep(1);
//WAITING
System.out.println("线程状态66: "+t4.getState());
//BLOCKED
System.out.println("线程状态55: "+t3.getState());
}
Gitee地址
XFS