java - 在设置了*中断状态*的情况下调用 Thread.sleep()?

标签 java multithreading thread-safety

Java 文档在这一点上并不清楚。如果在调用 Thread.sleep() 之前调用 Thread 中断会发生什么情况? :

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

请问InterruptedException被扔?

请指出相关文档。

最佳答案

是的,它会抛出异常。根据 Thread.sleep 的 javadoc , 方法:

Throws: InterruptedException - if any thread has interrupted the current thread. The interrupted status of the current thread is cleared when this exception is thrown.

在这种情况下,“有”是指代中断状态的非正式方式。遗憾的是它是非正式的 - 如果有某个地方的规范应该是精确和明确的,那么它无处不在,但它首先是线程原语。

中断状态机制的一般工作方式是,如果线程在不可中断(因为它正在运行)时接收到中断,那么中断实际上是等待线程被中断,此时它突然进入导致 InterruptedException。这是该机制的一个示例。

关于java - 在设置了*中断状态*的情况下调用 Thread.sleep()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5669760/

相关文章:

JavaScript 转义序列

java - 我如何在 JUnit 中检查两个对象数组是否相等?

dictionary - 当操作返回 Future 时如何使用 putIfAbsent

python - 与 SciPy.optimize 的并行性

ios - 关于使用完成 block 排队

java - 为什么 Java 的 InetAddress getHostName() 没有给我主机名?

java - Apache Ignite 二进制类型失效

java - 服务器应用程序 : Only works with a println output

c - 使用#pragma omp 进行硬并行化以找到第 N 个素数

java - 删除已删除的 ConcurrentHashMap 元素有多安全?