解析java中线程的生命周期

本文详细解析了Java中线程的生命周期,包括NEW、READY、RUNNING、BLOCKED、WAITING、TIMED_WAITING和TERMINATED七大状态,并通过实例分析了各状态间的转换,帮助理解线程执行过程中的行为。
摘要由CSDN通过智能技术生成

解析java中线程的生命周期

1 两种主流说法

1.1 官方API文档说法

线程的生命周期有NEW(新建)、RUNNABLE(可运行状态)、Blocked(阻塞状态)、WAITING(等待状态)、TIMED_WAITING(超时等待状态)、TERMINATED(退出状态)
在这里插入图片描述

1.2 Runnable状态细分说法

线程的生命周期有NEW(新建)、READY(就绪状态)、RUNNING-(运行状态)、Blocked(阻塞状态)、WAITING(等待状态)、TIMED_WAITING(超时等待状态)、TERMINATED(退出状态)

其中READY状态和RUNNING状态是由RUNNABLE状态细分下来的

2 具体分析(细分法为例)

2.1 新建(NEW)

尚未启动的线程就处于该状态

具体指的是只创建了线程对象,并没有提供.start方法去开启它

2.2 就绪(Ready)

线程对象调用了start方法就进入了该状态

进入就绪状态不一定会去运行,因为需要看cpu是否给你分配资源

但是通过线程对象.getState方法得到的状态只是6种,因此并不知晓该Runnable状态到底是属于Ready状态呢还是属于Running状态呢

2.3 运行(Running)

当一个线程处于就绪状态,且它成功的在本轮cpu资源争夺战中获得了胜利,因此它会进入Running运行状态

注意:只是代表抢到的时间片段对应的那段时间是可运行状态,当时间片用完时,会进入就绪状态,再进入下一轮的时间片资源争夺战。

因而就绪状态和运行状态是可以相互之间转换的

2.4 阻塞(BLOCKED)

被阻塞的等待监视器锁定的线程处于该状态

例子: 同步代码块或者同步方法,就限制了该方法或者代码块只允许符合条件的其中一个线程对象使用,保证了数据的安全性

2.5 等待(WAITING)

正在等待另外一个线程执行特定动作的线程处于此状态

例如 o.waiting;t.join

2.6 超时等待(TIMED_WAITING)

正在等待另一个线程执行动作达到指定等待时间的线程处于此状态。

说白了就是该线程需要过一段时间才会超时等待状态转换成就绪状态

此时若抢到了时间片资源,那么它会从它遇到超时等待状态的下一行代码执行

并不是又重来一次(记录了它进入超时状态之前的状态和位置)

例子: Thread.sleep方法 线程睡眠方法

2.7 结束(TERMINATED)

已经退出的线程处于该状态(调用了join方法就能进入该状态)

6 线程生命周期整体的图示

6.1 完整版

在这里插入图片描述

6.2 极简版(类比人出生到死亡)

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SSS4362

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值