
关注我,每天三分钟,轻松掌握一个Java知识点。
如果经历过面试找工作的同学,一定对线程这个概念不会感到陌生了。线程的声明周期也是经常会问到的考点。
在线程的声明周期中,主要包括新建、就绪、运行、阻塞和死亡5种状态。
我想了一个例子来解释这五种状态。我们来设想一个场景,假如有很多人都想在教堂向一位德高望重的教父忏悔,然而教父一次只能接待一个人,这个时候要求大家都要把对教父说的话提前准备到一个小本本上,准备好后教堂外面排队,等着教父叫号。

这个故事里,教父就是CPU,每个人就是线程,小本本就是run()方法中的内容。
当我们在本本上写好了要说话的话,就相当于线程进入了新建状态,这个状态时,线程和其他对象没有什么区别,就是安静的躺在那等着启动。
当我们调用了start()方法时,这个时候就可以参加教堂外的排队了,你有了被叫的资格。对应到线程,就是处于就绪状态,这个时候虚拟机会为这个线程创建方法调用栈和程序计数器,但是注意,这个时候还没有运行。
这里有个地方需要注意,不能直接调用run方法,如果你直接调用run方法,就会出现一个可怕的现象,你冲到教堂里,霸占住神父,当着他面写,还不许他离开直到你写完。

当被叫到号了,就可以跟神父去哲学探讨了。对应到线程就是运行状态,这里要说明一下,就是这个例子的bug,现实生活中,人们一个一个去神父那忏悔,而这个故事里,神父是挺一个人说一小段,立马让它在旁边等着,让下一个人说,给每个人说话的机会。这些已经跟神父说过话但是没说完的人的状态,就叫做阻塞状态。
而神父这种雨露均沾的做法,就是CPU时间片轮转调度.
以上说了4个状态了,那死亡状态怎么理解呢?其实有三种方法可以让线程结束最恶毒的一生:
第一种就是run或者call方法执行完了,也就是跟神父忏悔完了,正常死亡。
第二种就是抛出一个未捕获的异常或者Error,就像是忏悔过程中突发心肌梗塞死了。
第三种就是调用线程的stop方法,但是最好不要用,因为可能会造成死锁,这个就想你在忏悔一半觉得自己确实罪恶深重,自杀了。
以上就是线程生命周期的5种状态,最后的最后,我想说,大家可以把这次忏悔事件理解为一个线程。
以上就是今天分享的全部内容了,创作不易,希望大家多多关注,收藏,评论每条都看了,以后会提高自己的姿势水平,尽量把只是讲的透特且生动且有趣!
| 留言与评论(共有 0 条评论) |