多线程2(Java线程的状态)

1.NEW

2.TERMINATED

3.RUNNABLE

4.WAITING

5.TIMED_WAITING

6.BLOCKED


1.NEW

这个状态代表的是start方法执行之前的状态

也就是线程被创建,但还未被执行

java 复制代码
    public static void main1(String[] args) throws InterruptedException {
        Thread t = new Thread(()->{
            while (true){
                System.out.println("hello t");
                try {
                    Thread.sleep(2000);
                } catch (InterruptedException e) {
                    throw new RuntimeException(e);
                }
            }
        });

        System.out.println(t.getState());//在start之前->NEW

        t.start();
    }

2.TERMINATED

线程方法入口执行完毕

java 复制代码
    public static void main1(String[] args) throws InterruptedException {
        Thread t = new Thread(()->{
            /*while (true){
                System.out.println("hello t");
                try {
                    Thread.sleep(2000);
                } catch (InterruptedException e) {
                    throw new RuntimeException(e);
                }
            }*/
        });

        System.out.println(t.getState());//在start之前->NEW

        t.start();

        t.join();

        System.out.println(t.getState());//t线程执行结束

    }

3.RUNNABLE

这个状态细分为两种:分别是就绪队列中的线程和正在执行的线程

java 复制代码
    public static void main(String[] args) throws InterruptedException {
        Thread t = new Thread(()->{
            while (true){

            }
        });
        t.start();

        Thread.sleep(10);
        System.out.println(t.getState());
    }

4.WAITING

死等,join的情况下,比如说main线程等待t线程执行的过程,那么此时的main就是在死等,main的状态就是WAITING

java 复制代码
    public static void main(String[] args) throws InterruptedException {
        Thread mainThread = Thread.currentThread();//获取main线程

        Thread t = new Thread(()->{
            while (true){
                System.out.println(mainThread.getState());
                try {
                    Thread.sleep(2000);
                } catch (InterruptedException e) {
                    throw new RuntimeException(e);
                }
            }
        });
        t.start();

        t.join();//主线程等待t,此时一直在死等
    }

5.TIMED_WAITING

设置了超时时间的等待

比如说join方法添加了等待时间,那么等待的这段时间状态就是TIMED_WAITING

java 复制代码
    public static void main(String[] args) throws InterruptedException {
        Thread mainThread = Thread.currentThread();//获取main线程

        Thread t = new Thread(()->{
            while (true){
                System.out.println(mainThread.getState());
                try {
                    Thread.sleep(2000);
                } catch (InterruptedException e) {
                    throw new RuntimeException(e);
                }
            }
        });
        t.start();

        t.join(5555);//主线程等待t,此时一直在死等
    }

6.BLOCKED

加锁堵塞状态


以上这几种状态作用于调试代码的阶段,用来发现问题

相关推荐
凤凰院凶涛QAQ2 分钟前
《Java版数据结构 & 集合类剖析》集合框架的封装设计与顺序表:“从 Iterable 到 ArrayList:集合框架的‘职业树“
java·开发语言·数据结构
孟华苏17 分钟前
怎么快速排查内存泄漏问题
java·开发语言·python
zz345729811318 分钟前
C语言中字符串常量存储位置
c语言·开发语言·算法·青少年编程
noipp19 分钟前
推荐题目:洛谷 P16510 [GKS 2015 #C] gRanks
java·c语言·开发语言·c++·python·算法
flyinmind19 分钟前
Java环境与Android环境中使用QuickJS
java·开发语言·javascript·quickjs
郑洁文20 分钟前
基于Python的HTTP服务漏洞信息收集工具设计与实现
开发语言·python·http
不吃鱼的羊21 分钟前
DaVinci Developer自动连接
java·开发语言
Evand J24 分钟前
【MATLAB例程】VSIMM与IMM在机动目标跟踪中的性能对比,CV+CT双模型
开发语言·matlab·目标跟踪
farerboy27 分钟前
15-Java while 和 do...while循环
java·后端
Meteors.28 分钟前
Kotlin协程序使用技巧和应用场景
android·开发语言·kotlin