【狂神说Java】线程状态观测

  • Thread.State --> 查看JDK帮助文档
  • 线程状态是虚拟机状态,如下:
    • NEW
      尚未启动的线程
    • RUNNABLE
      在Java虚拟机中执行的线程处于这个状态
    • BLOCKED
      被阻塞等待监视器锁定的线程处于此状态
    • WAITING
      正在等待另一个线程执行特定动作的线程处于此状态
    • TIMED_WAITING
      正在等待另一个线程执行动作达到指定等待时间的线程处于此状态
    • TERMINATED
      已退出的线程处于此状态
  • 一个线程可以在给定时间点处于一个状态。这些状态是不反映任何操作系统线程状态的虚拟机状态。
public class TestState {
    public static void main(String[] args) {
        Thread thread = new Thread(()-> {
            for (int i = 0; i < 5; i++) {
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            System.out.println("////");
        });

        Thread.State state = thread.getState();
        System.out.println(state); // new
        // 观察启动后
        thread.start();

        // 观察线程
        state = thread.getState();
        System.out.println(state); // runnable

        //
        while (state != Thread.State.TERMINATED){ // 是否终止状态
            try {
                Thread.sleep(100);
                state = thread.getState(); // 更新状态
                System.out.println(state); // TIMED_WAITING
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

    }
}
posted @ 2021-09-16 18:17  Jie7  阅读(41)  评论(2)    收藏  举报