目录
状态是针对当前的线程调度的情况来描述的,咱们现在认为,线程是调度的基本单位了,状态更应该是线程的属性(后面再谈到状态,都是考虑线程的状态了)
-
线程的六种状态
1.NEW 创建了Thread对象,但是和没有调用start(内核里还没有创建对应PCB)
2.TERMINATED 表示内核中的pcb已经执行完毕了,但是Thread对象还在 因为势必会存在内核中的PCB没了 但是代码中的t对象和在的情况 此时就需要通过特定的状态,来把t对象表示成"无效" 此时也是不能重新start的,一个线程只能start一次
3.RUNNABLE 可运行的
a)正在CPU上执行的
b)在就绪队列里,随时可以去cpu上执行
4.WAITING :等待其他人来通知 (4 5 6都是表示线程pcb正在阻塞队列中)
5.TIMED_WAITING:等待一定的时间
6.BLOCKED:等待锁所产生的阻塞
package thread;
public class ThreadDemo11 {
public static void main(String[] args) throws InterruptedException {
Thread t = new Thread(() ->{
for(int i = 0; i< 1000;i++){
//这个循环体什么都不干 也不sleep
}
});
//线程执行之前 获取t状态 就是NEW状态
System.out.println("start之前:"+t.getState());
t.start();
System.out.println("t执行中的状态:"+t.getState());
t.join();
//线程执行完毕之后,就是TERMINATED
System.out.println("t结束之后:"+t.getState());
}
}
执行结果:
-
状态之间的切换条件