我的假设是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();
}
}发布于 2015-12-17 09:13:30
是的,它不会抛出InterruptedException。JavaDoc
公共静态空穴parkNanos(长纳米) 为线程调度目的禁用当前线程,直至指定的等待时间,除非许可可用。如果许可是可用的,那么它就会被消耗,调用将立即返回;否则,当前线程将被禁用用于线程调度,并处于休眠状态,直到发生以下四种情况之一:
此方法不报告其中哪一个导致方法返回。调用者首先应该重新检查导致线程停车的条件。调用方还可以确定,例如,线程的中断状态或返回时经过的时间。
参数: nanos -等待的最大纳秒数
是的,忽视中断的事实是不正确的。因此,您必须检查中断,并以某种方式处理它(例如关闭一些资源并抛出异常或关闭线程等)。
有一篇来自Java语言架构师Brian,http://www.ibm.com/developerworks/library/j-jtp05236/的好文章
https://stackoverflow.com/questions/34329956
复制相似问题