线程的状态

📅 2026/6/17 20:58:03
线程的状态
[本节目标]线程状态一共有几种每种状态表示的含义状态之间的切换条件1.观察线程的所有状态NEW: 安排了⼯作, 还未开始⾏动new了Thread对象还没startRUNNABLE: 可⼯作的. ⼜可以分成正在⼯作中和即将开始⼯作.就绪1线程正在CPU上执行 2线程随时可以去CPU上执行BLOCKED: 这⼏个都表⽰排队等着其他事情也是一种阻塞比较特殊由于锁导致的阻塞。WAITING: 这⼏个都表示排队等着其他事情死等没有超时时间的阻塞等待。TIMED_WAITING: 这⼏个都表⽰排队等着其他事情。指定时间阻塞线程阻塞不参与CPU调度不继续执行了但是阻塞的时间是有上限的。TERMINATED: ⼯作完成了.内核中的线程已经结束了但是Thread对象还在public class Demo1 { public static void main(String[] args) throws InterruptedException { Thread tnew Thread(()-{ while (true){ //啥都不做 try { Thread.sleep(1000); } catch (InterruptedException e) { throw new RuntimeException(e); } } }); System.out.println(t.getState()); t.start(); Thread.sleep(1000); System.out.println(t.getState()); } }另外join(时间)也是会进入到TIME_WAINTING状态2.线程状态应用的场景调试程序找bug多线程的程序中理解线程状态是帮助我们调试程序的关键比如发现代码中某个逻辑好像卡死了明明调用了没有执行/没有执行完jconsole/其他工具查看当前进程中的所有线程找到对应逻辑的线程是谁看线程的状态是啥看到TIMED_WAITING/WAINTING怀疑是不是代码中某个方法产生阻塞没有被及时唤醒看到BLOCKED怀疑是不是代码中出现死锁看到RUNNABLE线程本身没问题考虑逻辑上某些条件没有预期出发之类的再看线程具体的调用栈尤其是阻塞的状态线程代码阻塞在哪一行了……3.线程状态和状态转移的意义