1.New
Thread对象已经有了。start方法还没调用
2.TERMINATED
Thread对象还在,内核中的线程已经没了
3.RUNNABLE
就绪状态(线程已经在CPU上执行了/线程正在排队等待上CPU执行)
4.TIMED_WAITING
阻塞,由于sleep这种固定时间的方式产生的阻塞
5.WAITING 阻塞。
由于wait这种不固定时间的方式产生的阻塞
6.BLOCKED
阻塞,由于锁竞争导致的阻塞
我们来看代码:
class Main{ public static void main(String[] args) throws InterruptedException { Thread t = new Thread(() -> { while(true) { try { Thread.sleep(1000);//TIMED_WAITING状态 阻塞,由于sleep这种固定时间的方式产生的阻塞 } catch (InterruptedException e) { throw new RuntimeException(e); } } }); System.out.println(t.getState());//NEW状态 调用start方法之前 t.start(); for (int i = 0; i < 5; i++) { System.out.println(t.getState());//运行时,RUNNABLE状态 Thread.sleep(1000); } t.join(); System.out.println(t.getState());//TERMINATED状态 线程执行结束之后 } }
其他两种这里暂时不做赘述。