一张图搞懂多线程的六种状态

一张图搞懂多线程的六种状态

在很多网上流传的教学视频种,有说线程有5种状态的、7种状态的。
实际上在java的Thread类中,已经明确枚举了线程的6种状态

    public enum State {
        NEW,
        RUNNABLE,
        BLOCKED,
        WAITING,
        TIMED_WAITING,
        TERMINATED;
    }

在JDK中,线程的就绪状态和运行中的状态被统称为runnable运行状态。

线程被创建,并调用start()方法后,进入runnable状态,获得锁的情况下,就在就绪状态等待被CPU调用进入真正的执行状态。在执行过程中,由于CPU时间片的原理,执行一段时间后,有可能就被cpu挂起,再次进入就绪状态,等待被cpu调用。

Thread.yield()只是在runnable的状态中,让线程放弃cpu资源,重新进入就绪状态。也许很快又被cpu调度进行执行。

线程在runnable状态中,被调用
带超时时间的sleep、wait、join方法和LockSupport.parkNanos();LockSupport.parkUntil();
线程进入TIMED_WAITING 超时等待状态。这个超时等待按设定的时间进行等待,期间如果没有被唤醒,就根据获没获得锁进入runnable或blocked状态。其中sleep方法在调用的时候是没有释放锁的,所以,睡醒后可以直接拿着锁进入就绪状态等待cpu调度。
被notify唤醒后进入阻塞状态开始争夺锁

Thread.sleep(long);
o.wait(long);
t.join(long;
LockSupport.parkNanos();
LockSupport.parkUntil();

线程在runnable状态中,被调用
无参的wait、join方法和LockSupport.park()
线程进入WAITING 等待状态。
被notify唤醒后进入阻塞状态开始争夺锁

o.wait();
t.join();
LockSupport.park();

期间,程序运行结束,或在任意一个状态中抛出异常,直接进入TERMINATED终止状态。

最后,上图~

在这里插入图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值