给定一个在未被阻塞的情况下被中断的线程(即没有抛出InterruptedException),那么该线程稍后尝试 sleep 时会抛出InterruptedException吗?
documentation并未明确指出:
最佳答案
是的,它确实。
在这一点上,文档可能还不够清晰,但这很容易进行测试(例如,参见下面您自己的答案),以及查看规范的(HotSpot)实现。 Thread.sleep插入os:sleep
,它会在启动 sleep 过程之前检查中断,因为您可以看到here(查找os:sleep
)。
如果不是这种情况,则或多或少将无法使用中断。如果它们碰巧在任何sleep()
调用之外到达,则它们将丢失,因为随后的sleep()
调用将忽略它们。您甚至无法重新中断线程,因为该线程已被中断。
关于java - 如果线程已经被中断,Thread.sleep是否会抛出?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23710025/