首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否有必要在调用LockSupport.parkNanos(long)后检查线程中断状态?

是否有必要在调用LockSupport.parkNanos(long)后检查线程中断状态?
EN

Stack Overflow用户
提问于 2015-12-17 08:34:54
回答 1查看 421关注 0票数 2

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

  1. 这是正确的吗?
  2. 如果需要,我需要检查标志并抛出InterruptedException吗?

样本使用情况:

代码语言:javascript
复制
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();
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-17 09:13:30

是的,它不会抛出InterruptedException。JavaDoc

公共静态空穴parkNanos(长纳米) 为线程调度目的禁用当前线程,直至指定的等待时间,除非许可可用。如果许可是可用的,那么它就会被消耗,调用将立即返回;否则,当前线程将被禁用用于线程调度,并处于休眠状态,直到发生以下四种情况之一:

  • 其他一些线程调用以当前线程为目标的撤销;
  • 或者其他线程中断当前线程;
  • 或指定的等待时间;
  • 或虚假调用(即,无缘无故)返回。

此方法不报告其中哪一个导致方法返回。调用者首先应该重新检查导致线程停车的条件。调用方还可以确定,例如,线程的中断状态或返回时经过的时间。

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

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

有一篇来自Java语言架构师Brian,http://www.ibm.com/developerworks/library/j-jtp05236/的好文章

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34329956

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档