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 公共静态空间纳米公园(长纳米) 出于线程调度目的禁用当前线程,最多为指定的 等待时间,除非有许可证。如果许可证是 可用,然后它被消耗,呼叫立即返回; 否则,当前线程将禁用线程调度 在以下四种情况之一发生之前,目标和状态处于休眠状态:
- 其他一些线程以当前线程作为 目标
- 或者其他线程中断当前线程
- 或经过指定的等待时间
- 或者电话错误地(也就是说,没有原因地)返回