目录
1.观察线程的所有状态
线程的状态是一个枚举类型 Thread.State
这里我们使用代码实现打引出所有的状态
打印结果:
这里先简单的描述一下各个状态所表示的含义
- NEW:安排了工作,但还没开始行动.
- RUNNABLE:可工作的,又可以分成正在工作中和即将开始工作.
- BLOCKED/ WAITING/ TIMED_WAITING:这几个都表示排队等着其他事情.
- TERMINATED:工作完成了.
2.状态的具体意义
NEW: Thread对象创建出来了,但是内核中的PCB还没有创建出来.
RUNNABLE: 当前的PCB也创建出来了,同时这个PCB随时待命(就绪). 这个线程可能是在CPU上运行,也可能是在就绪队列中排队.
TIMED_WAITING: 表示当前的PCB正在阻塞队列中等待(是一个"带有结束时间"的等待).
例如: Thread.sleep(1000); 这个操作就会使当前线程处于这个状态.
WAITING: 线程中如果调用了 wait() 方法,也会阻塞等待,此时线程处在这个状态(死等).处在这个状态后只能等待其他线程唤醒(notify())该线程.
BLOCKED: 线程中尝试进行加锁,结果发现锁已经被其他线程占用了,此时该线程也会阻塞等待,处于该状态. 这个等待就会在其他线程释放锁之后被唤醒.
TERMINATED: 表示当前PCB已经结束了,但是Thread对象还在,此时获取线程状态就是这个状态.
TIMED_WAITING,WAITING和BLOCKED这三种状态都表示线程阻塞等待了,且结束阻塞等待的条件不一样.