Java 线程的几种状态

发布于:2022-12-22 ⋅ 阅读:(411) ⋅ 点赞:(0)


线程的状态

在操作系统中,对于PCB有一个状态的描述
Java中觉得自带的状态不是特别合适,自己又搞了一套状态规则

一共有六种状态:

NEW: Thread对象创建出来了,但是内核的PCB还没创建(还没真正创建线程)
TERMINATED: 内核的PCB销毁了,但是Thread对象还在

RUNNABLE: 就绪状态(正在CPU上运行+在就绪队列中排队)

以下是阻塞状态:
TIMED_WAITING: 按照一定的时间,进行阻塞 (sleep,join(时间))
WAITING: 特殊的阻塞状态,调用wait/join()
BLOCKED: 等待锁的时候进入的阻塞状态

线程状态转移图:在这里插入图片描述
借鉴了一个在网上看到的很好的图:
在这里插入图片描述

观察线程的状态和转移

举个例子:

 public static void main(String[] args) throws InterruptedException {
        Thread thread = new Thread(()-> {
            for (int i = 0; i < 10_0000_0000; i++) {
                //无事发生
            }
        });
        //NEW
        System.out.println(thread.getState());

        thread.start();
        //RUNNABLE
        System.out.println(thread.getState());

        thread.join();
        
        //TERMINATED
        System.out.println(thread.getState());
    }

在这里插入图片描述

 public static void main(String[] args) throws InterruptedException {
        Thread thread = new Thread(()-> {
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        });
        
        //NEW
        System.out.println(thread.getState());

        thread.start();

        Thread.sleep(50);
        //TIMED_WAITING
        System.out.println(thread.getState());


        thread.join();
        //TERMINATED
        System.out.println(thread.getState());
    }

在这里插入图片描述

总结

在这里插入图片描述

你可以叫我哒哒呀
非常欢迎以及感谢友友们的指出问题和支持!
本篇到此结束
“莫愁千里路,自有到来风。”
我们顶峰相见!