Java线程的几种状态你都知道有哪些吗?

对于不少Java学习者来说,线程有几种状态这个问题可能还不是很清楚,网上的各种博客的说法也是大相径庭。今天就来带大家一起揭开事实的真相,彻底搞明白线程到底有几种状态。

对于Java中线程究竟有几种状态这个问题,首先大家要学会在哪里找答案。由于在Java中,java.lang.Thread就是Java对线程的实现,所以很容易想到答案可能会在Thread类的注释中。

查看源码之后,果不其然,答案就在这里,请大家看下面的源码片段:

怎么样,是不是一目了然?答案就是6种。如果有点英语基础的朋友们就可以大概了解它们的意思了。

NEW:新的

RUNNABLE:可运行的

BLOCKED:阻塞的

WAITING:等待的

TIMED_WAITING:等待某个时间的

TERMINATED:终止的

接下来就让我们分别来看看它们各自的详细说明:

NEW

该状态描述的是线程已经被new出来,但还未启动。NEW这种状态对于每个线程来说,只可能有一次处于该状态,因为一个线程实例只能够被启动一次。

RUNNABLE

如果处于NEW状态的线程调用了start方法,就会处于RUNNABLE状态。但是请注意,线程有可能正在运行,也有可能在等待运行(具体什么时候运行要由线程调度器来安排)!

BLOCKED

当线程申请一个由其他线程持有的独占资源(比如锁)时就会处于该状态。当线程不再阻塞时,状态会从BLOCKED转为RUNNABLE。

WAITING

当一个线程执行了某些特定的方法后就会处于这种状态,也就是等待其他线程执行另外一些操作的状态。

能够使线程变为WAITING状态的几种方法是:Object.wait()、Thread.join()、LockSupport.park(Object blocker)。

TIMED_WAITING

该状态类似于上面的WAITING,只不过WAITING是无限制地等待,而TIMED_WAITING只等待一个特定的时间。时间一到,处于TIMED_WAITING状态的线程就会转为RUNNABLE。

TERMINATED

当线程执行完毕后会处于该状态。和NEW状态一样,每个线程实例也只可能有一次TERMINATED状态。不管是run方法正常结束还是由于抛出异常而提前终止,都会导致线程处于该种状态。

以上就是Java中线程有几种状态的介绍,希望大家都能够吸收掉这块的知识点,对于后续的Java并发编程是非常重要的。只有搞清楚线程的各个状态的特点,才能理清复杂的多线程编程。

如果本文对你有所帮助的话,欢迎转发关注,你的支持是我的最大帮助和动力。后续还会有更多原创文章分享给大家,敬请期待!

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20200205A0O8PI00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券

玩转腾讯云 有奖征文活动