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


#Java#java线程到底有多少种状态?
文章图片
#Java#java线程到底有多少种状态?

引子最近也在看面试题 , 看到线程这一块然后问线程有多少种状态 , 然后查了一些博客发现居然各种说法的都有 。 如果你对此不是很确定的话甚至是模棱两可 , 这时面试官可能问一句:你确定 ?接着你就慌了 , 然后支支吾吾不敢确定 , 也许因为这个你就跟Offer无缘了 。 没办法只能去源码中看一看 , 就是java.lang.Thread.State这个枚举类 。 阅读前加个关注呗 , 希望正在面试的你面试顺利!
代码先看代码 , 然后再看java doc文档关于状态的介绍吧 , 相信这些是最权威的了
线程状态 。 线程可以处于以下状态之一 , 一个线程在给定时间点只能处于一种状态 。 这些状态是不反映任何操作系统线程状态的虚拟机状态 。

  • NEW :尚未启动的线程处于此状态
  • RUNNABLE :在Java虚拟机中执行的线程处于这种状态
  • BLOCKED:等待监视器锁定被阻止的线程处于此状态 。
  • WAITING :无限期等待另一线程执行特定操作的线程处于此状态 。
  • TIMED_WAITING: 在指定等待时间内等待另一线程执行操作的线程处于此状态 。
  • 【#Java#java线程到底有多少种状态?】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呢 。 加油吧 , 推荐一本java并发编程程的书给你们 , java多线程这一块算是面试必问的一个环节了 。