Java 线程的6种状态

Java 线程的6种状态

不同于系统线程的5种状态,Java线程的6种状分别为

  • 创建
    • NEW
  • 运行
    • RUNNABLE
    • BLOCKED
    • WAITING
    • TIMED_WAITING
  • 结束
    • TERMINATED

系统API文档

在这里插入图片描述
在这里插入图片描述

具体的例子

NEW
线程被创建,但是没有运行

//初始化一个对象,但是没有调用start()方法
       Thread thread1 =new Thread("t1"){
           @Override
           public void run() {
               System.out.println("running......");
           }
       };

       System.out.println("T1 的状态是: "+ thread1.getState());

RUNNABLE
存在java虚拟机中,等待系统资源(比如CPU调度)其实就是正常运行
运行(RUNNABLE):Java线程中将就绪(ready)和运行中(running)两种状态笼统的称为“RUNNABLE”,此时有可能分配了时间片,也有可能没有分配时间片.

 //java 将 ready和running两种状态笼统的称为RUNNABLE
        Thread thread2 =new Thread("t2"){
            @Override
            public void run() {

                while (true){
                }
            }
        };
        thread2.start();
        System.out.println("T2 的状态是: "+thread2.getState());

TERMINATED
线程生命周期结束,run方法之后自动释放

//线程结束自动结束
        Thread thread3 =new Thread("t3"){
            @Override
            public void run() {
            
            }
        };
        thread3.start();

BLOCKED 阻塞
凡是涉及到 的,大概率是BLOCK状态。
比如线程1等待线程2 释放锁

 //6. 阻塞(BLOCKED):表示线程阻塞于锁。两个线程抢占同一个锁,没抢到锁的线程就会进行BLOCKED状态.
        //代码解释:线程6和线程4有一个共同的特点就是给ThreadState.class进行了加锁,线程4的执行时间比较长,锁被线程4掌握, 这个时候线程6就会拿不到锁也就进人了BLOCKED状态
        Thread thread6 =new Thread("t6"){

            @Override
            public void run() {
                synchronized (example.class){

                    try {
                        Thread.sleep(909090);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }

                }

            }
        };
        thread6.start();

WAITING
进入该状态的线程需要等待其他线程做出一些特定动作(通知或中断)
比如调用另一个线程的join方法

//5. 等待(WAITING):进入该状态的线程需要等待其他线程做出一些特定动作(通知或中断)
        Thread thread5 =new Thread("t5"){

            @Override
            public void run() {

                try {
                    thread2.join();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        };
        thread5.start();

TIMED_WAITING
比如使用Thread.sleep(100000)使线程休眠了很久
它可以在指定的时间后自行返回

//超时等待(TIMED_WAITING) 可以在指定的时间自动返回
        Thread thread4 =new Thread("t4"){

            @Override
            public void run() {
                synchronized (example.class){

                    try {
                        Thread.sleep(9999999);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        };
        thread4.start();

运行结果
在这里插入图片描述

图文理解

在这里插入图片描述
yield 和join的区别
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值