Java中线程的状态转换问题,自己一直没有完全缕清晰,了解个大概,细节上却又模棱两可,究其原因,还是没有仔细的去细致了解相关知识点,今天就花时间整理一下这部分的相关内容。
关于java中线程状态问题,网络上各种答案都有,比如单就“线程状态”有哪几种这个问题,就可以找到好多种,有3种的、4种的、5种的、6种的和7种的,线程状态间的转换关系图,更是百花齐放,如果你不是很清晰,绝对会迷失在这些状态的迷宫中。
3种的(就绪、阻塞和运行):
4种的(运行、就绪、挂起和结束):
5种的(新建、可运行、运行、阻塞和死亡):
还有6种的(初始、运行就绪、运行、阻塞、等待、等待队列及终止【为什么图上7种,后续有解释】):
7种的(初始、可运行、运行、阻塞、锁池、等待池及终止):
还有:
如果你跟我一样,一直对线程状态问题有疑惑,我相信你会有一种越看越蒙的感觉。我仔细想了下造成这种局面的原因,网络上很多博文上的解释,都是按照理解的思路去进行讲解的,但java中对线程状态的理解和真实之间有一些差异,理解java中的线程状态时粒度会更细,真实情况下java对线程进行封装时,进行了部分的简化,这两部分之间的信息差异,导致出现了各种不同理解的状态图。不能说哪一种是错的或者不完善的,只是理解的角度以及粒度不同而已。
Java中的线程状态到底有几种呢?6种,J