前两天面试,面试官问我:小伙子,你知道线程有几种状态吗?
呵,这也太简单了吧~ 我自信答道: 五种状态,分别是创建、就绪、运行、阻塞、死亡
面试官笑笑:那你知道调用sleep()之后是什么状态吗?
Emm… 阻塞态?但是sleep()的线程是不会释放锁的呀,就绪态?可人家也不能运行呀…
面试官看着我抓耳挠腮的样子,冷笑道:回去再好好看吧…

其实,Java线程除了以上五种状态,还存在等待(WAITING)超时等待(TIMED_WAITING) 两种状态

等待(WAITING)

处于这种状态的线程不会被分配CPU执行时间,它们要等待被显式地唤醒,否则会处于无限期等待的状态。对应的方法有以下几种

  • Object.wait()
  • Thread.join()
  • LockSupport.park()

如果要进行唤醒,则对应以下几种方法

  • Object.notify()
  • Object.notifyAll()
  • LockSupport.unpark(Thread)

超时等待(TIMED_WAITING)

处于这种状态的线程不会被分配CPU执行时间,不过无须无限期等待被其他线程显示地唤醒,在达到一定时间后它们会自动唤醒,对应方法有以下几种

  • Thread.sleep(long)
  • Object.wait(long)
  • Thread.join(long)
  • LockSupport.parkNanos()
  • LockSupport.parkUntil()

阻塞状态(BLOCKED)

线程等待进入被synchronized关键字修饰的方法或代码块

就绪状态(RUNNABLE)

  • 线程调用start()方法
  • 当前线程sleep()结束,其他线程join()结束,wait()被唤醒
  • 调用yield()方法,释放时间片,回到就绪态
  • 当前线程取得对象锁

sleep()的线程是什么状态相关推荐

  1. 面试:为什么 Java 线程没有Running状态?

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 来源 | my.oschina.net/goldenshaw/bl ...

  2. 为什么 Java 线程没有 Running 状态?一下被问懵!

    什么是 RUNNABLE? 与传统的ready状态的区别 与传统的running状态的区别 当I/O阻塞时 如何看待RUNNABLE状态? Java虚拟机层面所暴露给我们的状态,与操作系统底层的线程状 ...

  3. JAVA线程六种状态_Java:线程的六种状态及转化

    多线程概述及创建方式 Java:线程的六种状态及转化 关于线程的生命周期,网上书上说法不一,难以统一,本篇做一个总结: java.lang.Thread.State枚举类中定义了六种线程的状态,可以调 ...

  4. 线程五种状态(新建、就绪、运行、阻塞、死亡)

    线程的5种状态: 每个 Java 程序都有一个缺省的主线程,对于 Java 应用程序,主线程是 main()方法执行的线索: 对于 Applet 程序,主线程是指挥浏览器加载并执行 Java Appl ...

  5. JAVA线程间的状态转换

    线程间的状态转换:  1. 新建(new):新创建了一个线程对象. 2. 可运行(runnable):线程对象创建后,其他线程(比如main线程)调用了该对象的start()方法.该状态的线程位于可运 ...

  6. java线程四种状态

    一个线程可以有四种状态: 1.新(new), 即线程刚刚创建,而并未执行 2.可运行(runnable),意味着一旦时间分片机制有空闲的CPU周期提供给一个线程,那个线程便可立即开始运行.因此,线程可 ...

  7. 为什么 Java 线程没有 Running 状态?

    Java虚拟机层面所暴露给我们的状态,与操作系统底层的线程状态是两个不同层面的事.具体而言,这里说的 Java 线程状态均来自于 Thread 类下的 State 这一内部枚举类中所定义的状态: 什么 ...

  8. 线程的几种状态_拜托:不要再问我线程有多少种状态了

    废话不多说,有六种状态 当线程被创建并启动以后,它既不是一启动就进入了执行状态,也不是一直处于执行状态.在线程的生命周期中, 有几种状态呢?在Thread类中包含了个State枚举类,State枚举类 ...

  9. 面试官让我讲下线程的WAITING状态,我笑了

    转载自  面试官让我讲下线程的WAITING状态,我笑了 面试官Q:你讲下线程状态中的WAITING状态,什么时候会处于这个状态?什么时候离开这个状态? 小菜J 会心一笑... 一个正在无限期等待另一 ...

  10. 面试官问:为什么 Java 线程没有 Running 状态?我懵了

    转载自 面试官问:为什么 Java 线程没有 Running 状态?我懵了 什么是 RUNNABLE? 与传统的ready状态的区别 与传统的running状态的区别 当I/O阻塞时 如何看待RUNN ...

最新文章

  1. [python]关于字符串查找和re正则表达式的效率对比
  2. index.php?s=$1,thinkphp nginx配置rewrite,地址会多出个.php
  3. 基于FPGA的costas环同步系统仿真与分析
  4. 如何成为一名卓越的前端工程师
  5. MySQL—交叉连接、自然连接、内连接
  6. 《NLTK基础教程——用NLTK和Python库构建机器学习应用》——2.3 语句分离器
  7. 二进制_简学:二进制数制的应用
  8. android工程的建立,第一个Android项目HelloWorld的建立及剖析
  9. 炼数成金数据分析课程---17、机器学习聚类算法(后面要重点看)
  10. 如何查看谷歌卫星地图每级分辨率的两种方法
  11. 秃头程序员保姆教程:Spring框架自学之路(一)
  12. 国际信用卡VISA/MasterCard/AE/DC/JCB 卡号结构
  13. python发送put请求
  14. word文档编辑受限制怎么解除?
  15. 玩客云刷入openwrt系统
  16. STM32C8T6编码器电机测速与arduino光电模块测速
  17. 阿里云轻量应用服务器开启minecraft基岩版服务器(bedrock)
  18. 《关于推动港澳青年创新创业基地高质量发展实施意见》的通知
  19. 史上最全的 axios 工具封装
  20. 2、这是一张单纯的图片

热门文章

  1. 【STM32】基于stm32的阿里云智能家居
  2. 企业网络营销怎么找到精准客户?
  3. SpringCloud架构搭建常见问题
  4. 媒介易教你海外品牌推广:如何选择适合的新闻通稿发布平台?
  5. 建模助手 | 建筑界的难兄难弟?浅谈BIM与装配式的恩怨纠缠
  6. excel导出图片方格居中
  7. MDX Step by Step 读书笔记 - 个人专题(一) 如何理解 MDX 查询中WHERE 条件如何对应Cube 中的切片轴 Slicer Axis...
  8. java实现金钱数字转大写
  9. XV6实验-Lab0 Utilities
  10. 数字信号处理基础----快速傅里叶变换