我的假设是LockSupport.parkNanos(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();
}
}
答案 0 :(得分:2)
是的,它不会抛出InterruptedException。 JavaDoc的
public static void parkNanos(long nanos)
禁用当前线程以进行线程调度,最多可达到指定的线程 等待时间,除非有许可证。如果许可证是 可用然后它被消耗并且呼叫立即返回; 否则当前线程将被禁用以进行线程调度 目的和谎言一直处于休眠状态,直到四件事之一发生:
其他一些线程使用当前线程调用unpark 目标;
或其他一些线程中断当前线程;
- 或指定的等待时间过去;
- 或该虚假呼叫(即无缘无故)返回。
此方法不会报告导致这些问题 要返回的方法。呼叫者应该重新检查哪些条件 导致线程首先停放。来电者也可以 例如,确定线程的中断状态,或者 返回时经过的时间。
参数:nanos - 等待的最大纳秒数
是的,忽略中断的事实是不正确的。所以你必须检查中断并以某种方式处理它(例如关闭一些资源并抛出异常或关闭线程或其他)。
Java语言架构师Brian Goetz撰写了一篇很好的文章,http://www.ibm.com/developerworks/library/j-jtp05236/