设置* interrupt status *调用Thread.sleep()吗?


问题内容

关于这一点,Java文档尚不清楚。如果
调用Thread.sleep() 之前 在线程上调用中断会发生什么:

        //interrupt reaches Thread here
        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            return;
        }

会抛出InterruptedException吗?

请指向相关文档。


问题答案:

是的,它将引发异常。根据Thread.sleep的javadoc
,该方法为:

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

在这种情况下,“具有”是指中断状态的非正式方式。可惜它是非正式的-如果某个地方的规范应该准确无歧义,那么,它无处不在,但最重要的是线程基元。

中断状态机制通常的工作方式是,如果某个线程在不可中断时(因为正在运行)而接收到中断,则该中断实质上是要等到该线程被中断为止,此时该线程突然陷入一个原因中。
InterruptedException。这是该机制的一个例子。