线程有几种状态

说实话,当他第一次接触Java乘法时,他对这五种状态的理解远不如现在。
我记得当我第一次看到新的状态时,我心想——我们不是在对象交付后立即开始运行吗?后来我意识到,如果不调用start(),你就完全忽略了CPU,就像你造了一辆自行车,不踩踏板就跑不了一样。

一件有趣的事情是课程的状态。
当我在采访中被问到这个问题时,我立即说“它已经在运行了”。
面试官笑着说:“你在排队等待池中运行的CPU。
”他给我举了个例子:比如你同时打开三个浏览器选项卡,每个选项卡创建一个线程,但系统只有一个CPU,不可能同时运行三个线程。
他选了一个,就选了那个球场,而他没有选那个球场中的深蹲。
听了这话,我恍然大悟,“跑”这个词很形象。

打断说话,这是最容易出事的事情。
之前写了一个银行转账程序,两个线程同时抢占锁,导致死锁。
然后我没有意识到电线被卡在“同步锁”中——它们正在争夺一个空座位。
所以他们都想坐在他身上,所以就抱在一起了。
后来改成ReentrantLock,加了级别锁,问题就解决了。
具体数据我记不清了,不过在改之前,我测试过死锁,每百笔交易大约有3 个死锁,频率不低了。

我对其他阻塞没有遇到太多问题。
Thread.sleep 是最常见的。
上次我经历高浓度时,我让线材休眠5 毫秒,测试结果差了2 0%。
当时我不明白为什么差距这么大,后来发现是因为JVM在sleep的时候做了垃圾回收,占用了CPU。
我没有经历过这方面的很多种类,但是这个教训非常深刻。
DEAD状态其实很容易理解。
我的同事写了一个无限线程循环,忘记添加中断。
结果,记忆就涌进涌出。
线程直接死亡,不再启动。
以我所拥有的内存来看,该线程当时占用了大约2 00MB的内存,当它死掉时,JVM报告了OutOfMemoryError。
这种情况,看调试光束就可以明白。

纵观这五种状态,每一种状态都确实存在陷阱。
例如,很多人混淆了跑步和跑步的区别;而在阻塞的三种情况之间,同时阻塞和同步阻塞很容易混淆。
我在写代码的时候经常忘记线程调度过程是随机的。
您认为调整后它会成为稳定的优先事项吗?后来发现系统出现抽搐,主线程要等CPU半天。
如果你跑来跑去做一些真实的实验,你就会明白这个事实。

Java线程的五种状态是什么

Java线程状态分为两个系统。
操作系统有5 个级别。

操作系统级别: 1 、新形势新变化 在new Thread()之后,在start之前,它是new的。

2 可操作待机状态 start()后,条件满足,没有CPU等待调度。
Java不区分这个,直接认为是RUNNABLE。

3 运行状态为正在运行 CPU 分配给您并启动 run()。
时间片已消失或被盗,并且可以再次播放。

4 封锁状态为封锁 让CPU在sleep()、wait()和I/O期间主动工作。
不要参与调度,等到情况明确后再进行操作。

5 终止状态 已终止 run() 结束或停止,状态丢失。
所有资源均被回收。
Java级别: 1 . 新 同样的新操作系统,无法启动。

2 可操作的 启动后就可以安排了。
CPU是否分区就看运气了。

3 禁止 你没能抓住锁,并被困在等待它锁定的过程中。
等待锁被释放,然后将其改回RUNNABLE。

4 等待 呼叫等待、加入、无限等。
在您可以继续之前,其他人必须通知()。

5 等待时间 具有睡眠和等待时间参数。
时间到了它会自动打开。

6 终止 与终止的操作系统相同。

要点: 可运行 = 就绪 + 运行。
BLOCKED=内容锁定。
WAITING/TIMED_WAITING=主动等待。
终止的新特点是不可逆转。

您具体想了解哪一个?

线程的六种状态

记得有一次,午休时,我坐在办公室里,手里端着刚泡好的菊花茶,电脑屏幕上显示着代码。
我正在调试一个多线程程序,突然发现一个线程的状态在RUNNABLE和BLOCKED之间切换。
等等,还有别的事。
突然看到线程正在等待锁出来。
我看着电脑屏幕,时间仿佛静止了,心想,这条线索到底发生了什么?
那是下午三点钟。
我盯着电脑屏幕,看到线程在等待锁时从 RUNNABLE 状态变为 BLOCKED 状态。
我知道这是因为锁正在等待释放并且锁被另一个线程持有。
我尝试使用一些同步方法来解决这个问题,但结果并不好。

那天,我花了大约两个小时,终于得到了解决方案。
线程在等待锁释放的同时,就进入了阻塞状态,这是阻塞状态,也就是说暂时不能执行。
直到锁被释放,线程才能再次进入RUNNABLE状态并继续执行任务。

现在,每次回想起那个下午,我都会想到争论性质的变化以及我为解决它所做的努力。
生活就像这个多线程程序,充满了状态和转换。
我们需要做的就是了解这些状态并找到适当的解决方案来保持程序(生命)顺利运行。
但问题来了,你是否遇到过类似的线程状况问题?

java进阶知识——线程的六种状态

说白了,Java线程的状态是复杂的,它涵盖了从创建到完成的整个生命周期。
这很简单。
它们有以下六种状态,分别是:
1 .新创作(Nova):当我们在这一年进行这个项目时,续集的想法就在开始。
newThread创建后,它就在内存中,但工作还没有开始。
就像新建的房子还没有装修一样。

2 Runnable:调用初始化方法后,线程进入Runnable状态。
它就像一座带家具的房子,随时可以搬进去。
这里有两个条件:一是正在运行,做有线代码,就像你住在家里一样;二是正在运行。
另一种状态是就绪,电线已准备好,但操作系统不允许,但仍然,当你在房间里等待时,等待厨房做饭。

3 Blocked、Waiting、TimedWaiting:这三种状态都表示线程正在暂停执行,但原因不同。
他被堵住是因为他在等发际线,就像他在等电梯一样;我正在积极地等待等待线程,就像你在等待朋友一样;不合时宜的期待等待一定的时间,就像足球一样把恐惧放在心上。
起初我以为Blocked和Waiting是同一回事,但后来我发现我错了。
阻塞是由锁引起的,而等待是由主动等待的序列引起的。

4 终止:序列完成执行或由于异常而终止。
房屋搬入后因质量问题已被装修或拆除。

等等,还有一个。
您可以使用 Thread.getState() 来获取线程的当前状态。
这是一个重要的工具。

所以我认为在处理线程时了解这些状态是值得的,以便您可以更好地管理和优化并发程序。