一、操作系统中5种状态
二、java中的六种状态
- New: 刚被创建没有调用start()方法
- RUNNABLE: 当调用了 start() 方法之后,包括了操作系统中的READY和RUNNING两个状态。
- BLOCKED:阻塞。等待锁释放
- WAITING:等待。等待其他线程唤醒
- TIMED_WAITING:超时等待。等待一段时间自动唤醒
- TERMINATED:终止状态
@Slf4j(topic = "c.Test1")
public class Test1 {
public static void main(String[] args) throws InterruptedException {
// 状态一:New
Thread t1 = new Thread(() -> {
});
// 状态二:Runnable
Thread t2 = new Thread(() -> {
while (true) {
}
});
t2.start();
// 状态三:Timed Waiting
Thread t3 = new Thread(() -> {
synchronized (Test1.class) {
try {
Thread.sleep(1000000000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
);
t3.start();
// 状态四:Waiting
Thread t4 = new Thread(() -> {
try {
t3.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
});
t4.start();
// 状态五:Blocked
Thread t5 = new Thread(() -> {
synchronized (Test1.class) {
}
});
t5.start();
// 状态六:Terminated
Thread t6 = new Thread(() -> {
});
t6.start();
Thread.sleep(100);
log.debug("{}", t1.getState());
log.debug("{}", t2.getState());
log.debug("{}", t3.getState());
log.debug("{}", t4.getState());
log.debug("{}", t5.getState());
log.debug("{}", t6.getState());
}
}
- 关于start方法,①反复调用start,会抛出异常。②执行完毕后,再次调用start方法,抛出异常。