JAVA和Nginx 教程大全

网站首页 > 精选教程 正文

java线程到底有多少种状态?

wys521 2024-11-18 18:00:04 精选教程 69 ℃ 0 评论


引子

最近也在看面试题,看到线程这一块然后问线程有多少种状态,然后查了一些博客发现居然各种说法的都有。如果你对此不是很确定的话甚至是模棱两可,这时面试官可能问一句:你确定 ?接着你就慌了,然后支支吾吾不敢确定,也许因为这个你就跟Offer无缘了。没办法只能去源码中看一看,就是java.lang.Thread.State这个枚举类。

未阅读本文时,你认为有多少种状态呢?


代码

先看代码,然后再看java doc文档关于状态的介绍吧,相信这些是最权威的了

线程状态。线程可以处于以下状态之一,一个线程在给定时间点只能处于一种状态。这些状态是不反映任何操作系统线程状态的虚拟机状态。

  • NEW :尚未启动的线程处于此状态
  • RUNNABLE :在Java虚拟机中执行的线程处于这种状态
  • BLOCKED:等待监视器锁定被阻止的线程处于此状态。
  • WAITING :无限期等待另一线程执行特定操作的线程处于此状态。
  • TIMED_WAITING: 在指定等待时间内等待另一线程执行操作的线程处于此状态。
  • TERMINATED :已退出的线程处于此状态


哪些方法使线程处于WAITING,等待线程的线程状态。由于调用以下方法之一,线程处于等待状态,处于等待状态的线程正在等待另一个线程执行特定操作。例如,在对象上调用Object.wait()的线程正在等待另一个线程在该对象上调用Object.notify()或Object.notifyAll()。调用thread.join()的线程正在等待指定线程终止。

    • Object.wait with no timeout
    • Thread.join with no timeout
    • LockSupport.park

哪些方法使线程处于TIMED_WAITING,具有指定等待时间的等待线程的线程状态。由于使用指定的正等待时间调用以下方法之一,线程处于定时等待状态:

  • Thread.sleep
  • Object.wait with timeout
  • Thread.join with timeout
  • LockSupport.parkNanos
  • LockSupport.parkUntil

总结

现在我们可以确定的是线程的状态有6种,下次如果面试官在问你的话,你就可以有底气的说线程状态有6种,然后是哪6种以及何时处于何种状态,也许因此你就拿到了心仪的Offer呢。

关注我吧!

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表