如果线程已被中断,Thread.sleep会抛出吗?

maf*_*afu 5 java multithreading sleep interrupted-exception

给定一个在没有被阻塞的情况下被中断的线程(即没有抛出InterruptedException),该线程在以后尝试睡眠时是否会抛出InterruptedException?

文件没有明确说明这一点:

InterruptedException - 如果有任何线程中断了当前线程.抛出此异常时,将清除当前线程的中断状态.

Bee*_*ope 7

是的,它确实.

文档可能在这一点上并不十分清楚,但这很容易进行测试(例如,参见下面的答案),并查看规范(HotSpot)实现.弹了Thread.sleep出os:sleep哪些检查中断盯着睡眠过程之前,你可以看到这里(寻找os:sleep).

如果不是这种情况,中断或多或少都不可能使用.如果他们碰巧在任何sleep()呼叫之外到达,他们将会丢失,因为后续sleep()呼叫会忽略它们.您甚至无法重新中断线程,因为它已经被中断.