一、线程状态
1.NEW
2.RUNNABLE(READY/RUNNING)
3.WAITING
4.TIMED WAITING
5.BLOCKED
6.TERMINATED
关系图:
二、代码演示状态
public class StateDemo {
public static void main(String[] args) {
Thread t1 = new Thread(() -> {
while(true) {
// RUNNABLE
if(Thread.currentThread().isInterrupted()) {
break;
}
}
// 复位
Thread.interrupted();
try {
// 睡
synchronized (StateDemo.class) {
// WAITING
StateDemo.class.wait();
}
} catch (InterruptedException e) {
// 被打断了不做事
}
// TIMED_WAITING
sleep(5);
// 复位
Thread.interrupted();
sleep(5);
// BLOCKED
synchronized (StateDemo.class) {
while(true) {
if(Thread.currentThread().isInterrupted()) {
break;
}
}
}
// TERMINATED
});
System.out.println("线程状态1:"+t1.getState());
// 启动线程
t1.start();
sleep(1);
System.out.println("线程状态2:"+t1.getState());
// 打断
t1.interrupt();
sleep(1);
System.out.println("线程状态3:"+t1.getState());
// 唤醒
sleep(1);
synchronized (StateDemo.class) {
StateDemo.class.notify();
}
sleep(1);
System.out.println("线程状态4:"+t1.getState());
t1.interrupt();
// 开启第二个线程抢锁
Thread t2 = new Thread(() -> {
synchronized (StateDemo.class) {
while (!Thread.currentThread().isInterrupted()) {
}
}
});
t2.start();
sleep(1);
t1.interrupt();
sleep(1);
System.out.println("线程状态5:"+t1.getState());
sleep(1);
// 一起打断,t1与t2都结束
t2.interrupt();
t1.interrupt();
sleep(1);
System.out.println("线程状态6:"+t1.getState());
}
private static void sleep(int second) {
try {
Thread.sleep(second*1000);
} catch (InterruptedException e) {
// 被打断不做事
}
}
}
执行结果:
线程状态1:NEW
线程状态2:RUNNABLE
线程状态3:WAITING
线程状态4:TIMED_WAITING
线程状态5:BLOCKED
线程状态6:TERMINATED