sleep()的线程是什么状态

本文深入探讨了Java线程的等待和超时等待状态,包括WAITING和TIMED_WAITING。线程在调用特定方法如sleep()、wait()或join()后会进入这些状态,并详细介绍了如何唤醒这些等待的线程。理解这些状态对于优化多线程程序至关重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前两天面试,面试官问我:小伙子,你知道线程有几种状态吗?
呵,这也太简单了吧~ 我自信答道: 五种状态,分别是创建、就绪、运行、阻塞、死亡
面试官笑笑:那你知道调用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()方法,释放时间片,回到就绪态
  • 当前线程取得对象锁
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值