java线程的生命周期有哪些

说实话,谈论线程是很有趣的。
我第一次接触代码时也忽略了你提到的五种状态。
如果我们看看我们每天所做的Java写作,new(newThread)状态是最基本的。
例如,如果您在 IDE 中输入“Thread t1 = new Thread();”,则 t1 就像一个未唤醒的孩子一样处于新状态,除了等待唤醒之外什么也不做。

有趣的是,它处于就绪(可执行)状态。
这取决于具体情况。
例如,如果你一直写t1 .start();,操作系统必须将t1 塞进就绪队列。
此时它并没有真正运行,它只是在等待CPU老大哥喊“轮到你了”。
我有一个使用多线程处理图像的项目。
添加 start() 后,我注意到 CPU 使用率突然增加。
然而,当我仔细查看任务管理器时,我注意到线程都是按顺序运行的,实际上运行的线程很少。

就执行状态而言,这是最直观的。
当轮到我时,CPU 开始执行 run() 方法。
之前在调试无限循环线程时,发现卡在某个条件判断上。
CPU运行速度很快,但没有任何变化。
最后发现是浮点比较精度问题。
它必须运行到最后,除非它自己跳出循环或者它的时间片被具有更高优先级的东西接管。

关于死亡状态我不多说,但是当你运行它时它就会消失。
但是,您可能还想简单地使用 Thread.stop() 来终止线程。
后来我被警告说这是一个危险的操作并且容易造成数据混乱。
我记得以前有人说过,这就像把人从过山车上拉下来一样。
它可能会导致死亡,但更有可能会出现问题。

阻塞状态是最常见的。
例如,如果您调用 t1 .sleep(1 000); t1 会在这1 秒内进入休眠,唤醒并返回到就绪队列。
或者调用 t1 .wait();等待特定资源。
目前,它只是袖手旁观,没有提出异议。
这是我在创建数据库操作时最担心的事情。
一个线程陷入 wait() 状态,所有其他线程都被阻塞。
最后没办法,只能重启服务。
有一次,我添加了notifyAll()唤醒机制,却忘记添加同步锁,差点导致系统崩溃。

老实说,当谈到线程状态时,如果只看理论,很容易感到困惑。
我建议您查找《Java 并发编程实践》一书。
一个线程可以用 suspend() 挂起,另一个线程可以用resume() 恢复。
原来中间的其他线程也调用了suspend(),导致直接死锁。
那场面真是太扎心了。

数据停止()、暂停()、恢复()我记得自 Java 9 以来,所有这些都已被弃用。
现在建议使用 Interrupt() 和 join(),但这些用法仍在旧代码中使用。
我自己从未这样做过,所以我建议您检查一下。

线程的生命周期,真的没那么简单

结论: 1 、线程的生命周期包括操作系统和编程语言,核心是状态之间的转换。
2 、通用线程的生命周期有5 种状态:初始、健康、运行、睡眠和终止。
3 .阐明了Java线程的生命周期,有6 种状态:初始化、健康/执行、阻塞、无限期等待、限时等待和终止。
4 . 关键转换:RUNNABLE→BLOCKED(锁争用)、RUNNABLE→WAITING(wait()、join()、park())、RUNNABLE→TIMED_WAITING(sleep()、wait() with timeout、parkNanos())。
5 . NEW→RUNNABLE(start()方法),RUNNABLE→TERMINATED(执行完成或异常)。
6 . 线程状态之间的转换由同步机制、资源争用或显式方法发起。

什么是线程

等一下,我昨天看到送货员送外卖,他被堵在路口,后面排着长长的队伍。
等红灯的时候,他一边用手机查看订单,仿佛手机APP也在后台抢红包。
这时候我突然想到这个手机app一定是分了很多线程的。
送餐小弟就像一根线。
等待的时候,他可以做其他事情,但是这个手机应用必须同时处理你的点餐、支付、导航、抢红包。
这不是就像在一个进程中运行多个线程吗?
线程就像在厨房做饭。
一人负责切菜,一人负责做饭,一人负责收碗。
他们都在同一个锅里忙碌,却做着不同的任务。
这个厨房就是流程,切菜、做饭、收碗就是线程。
你想一想,如果菜刀跑了,厨师还要自己切菜,那不是很乱吗? 所以,线程必须同步好,否则数据就会乱。
就像那个手机app,如果抢红包的线程抢了支付的钱,那可就惨了。

我前雇主的项目存在线程问题。
他们用Java写的系统一开始还算顺利,但后来添加了新功能后就卡住了。
技术老大一看,发现线程同步不好,数据被抢占。
最后花了整整一周的时间来添加这些锁,系统又恢复顺利了。
那段时间,他们每天加班到凌晨两点,咖啡喝起来像茶一样。
你看,线程如果使用得当可以提高效率,但如果使用不当,那就真的是致命的了。

所以,线程就像小工人。
你必须照顾他们,不要让他们打架。
否则,系统就会瘫痪。
就像那个路口,如果车不按红绿灯走,那它还是堵的吧? 等等,还有一件事。
听说有些先进的系统可以利用多线程来预测哪个线程可能会卡住,然后提前给它添加资源。
那不是更好吗? 下次我得仔细研究一下这项技术。