Java 调用LockSupport.parknos(long)后是否需要检查线程中断状态?

Java 调用LockSupport.parknos(long)后是否需要检查线程中断状态?,java,api,concurrency,memory-barriers,java-memory-model,Java,Api,Concurrency,Memory Barriers,Java Memory Model,我的假设是LockSupport.parknos(long)不会抛出InterruptedException,但是可以在线程上设置标志 这是正确的吗 如果是这样,我是否需要检查标志并抛出InterruptedException 示例用法: import java.util.concurrent.locks.LockSupport; public void parkNanosInterruptibly(final long nanos) throws InterruptedException {

我的假设是
LockSupport.parknos(long)
不会抛出
InterruptedException
,但是可以在线程上设置标志

  • 这是正确的吗
  • 如果是这样,我是否需要检查标志并抛出
    InterruptedException
  • 示例用法:

    import java.util.concurrent.locks.LockSupport;
    
    public void parkNanosInterruptibly(final long nanos)
    throws InterruptedException {
        LockSupport.parkNanos(nanos);
        // If this thread was interrupted during parkNanos(), we must throw "by contract".
        if (Thread.interrupted()) {
            throw new InterruptedException();
        }
    }
    

    是的,它不会抛出InterruptedException。JavaDoc

    公共静态空间纳米公园(长纳米)

    出于线程调度目的禁用当前线程,最多为指定的 等待时间,除非有许可证。如果许可证是 可用,然后它被消耗,呼叫立即返回; 否则,当前线程将禁用线程调度 在以下四种情况之一发生之前,目标和状态处于休眠状态:

    • 其他一些线程以当前线程作为 目标

    • 或者其他线程中断当前线程

    • 或经过指定的等待时间

    • 或者电话错误地(也就是说,没有原因地)返回

    此方法不报告这些原因中的哪一个 返回的方法。来电者应重新检查以下情况: 首先导致线程停止。致电人士亦可 例如,确定线程的中断状态,或 返回时经过的时间

    参数:Nano-等待的最大纳秒数

    是的,忽视中断的事实是不正确的。因此,您必须检查中断并以某种方式处理它(例如,关闭一些资源并抛出异常或关闭线程或其他任何东西)

    Java语言架构师Brian Goetz的一篇好文章