当前位置: 首页 > 知识库问答 >
问题:

关于thread.interrupted()的java混淆

尉迟越
2023-03-14

我正在阅读关于线程的oracle java教程,我看到了这个示例

for (int i = 0; i < inputs.length; i++) {
      heavyCrunch(inputs[i]);
      if (Thread.interrupted()) {
           // We've been interrupted: no more crunching.
      return;
}

当有人可能使用这些方法签入他们的代码时?thread.interrupt(标志)是静态的,所以通过上面的检查,我们实际上检查是否有任何踏面被中断了?即使是这样,根据教程,当线程通过调用静态方法thread.interrupted检查中断时,中断状态将被清除。任何通过抛出InterruptedException退出的方法在这样做时将清除中断状态

我是不是漏掉了什么?或者这只是有用的,如果某个线程已经收到了一个中断,但没有检查它,或者没有抛出它?

共有1个答案

公孙涵育
2023-03-14

这是线程中断的实现

public static boolean interrupted() {
    return currentThread().isInterrupted(true);
}

private native boolean isInterrupted(boolean ClearInterrupted);

如您所见,它只能检查/重置当前线程的中断状态。如果它不是静态的,您可以在其他线程上调用它并重置它们的状态,这是API不允许的。

 类似资料:
  • 我正在测试

  • 但现在它打印出“SAT 5月18日19:00:00 CDT 2013”(因为我的本地机器在CDT上),但我希望结果是“SAT 5月18日24:00:00 CDT 2013”。如何将日期字符串“1368921600000”解释为EST日期?谢谢-戴夫

  • 我对两个说明都有点困惑。首先,让我们放弃扫描值为0和未定义的/bsr或bitsize/lzcnt结果的特殊情况--这个区别很明显,不是我的问题的一部分。 让我们取二进制值 计数,返回到位0(即lsb)的索引或距离。 如果CPU上没有可用的BMI,如何模拟为?或者在的情况下位0是MSB?英特尔规范中的两个“代码操作”也不同,一个从左边计数或索引,另一个从右边计数或索引。 也许有人能对此有所了解,我没

  • 我知道System类的System.In是InputStream的一个具体子类的实例,因为InputStream的read()方法是抽象的,System.In必须重写这个方法。根据关于InputStream的read()方法的文档: 从输入流中读取下一个字节的数据。值字节以0到255范围内的int形式返回。如果由于已到达流的结尾而没有可用的字节,则返回值-1。此方法将阻塞,直到输入数据可用、检测到

  • 关于MVP和MVVM的几点混淆 在问这个问题之前,我读了一篇关于MVP和MVVM的文章。(例如:http://martinfowler.com/eaadev/uiarchs.html) null 例如,富客户端应用程序将同时使用本地数据库和远程服务。 在业务层,有两种对象! 域对象,它是从我的本地数据库中读取的。 在MVP中,只有一个“模型层”,所以我可以在这个模型层中管理和存储domian对象和

  • 问题内容: 我正在使用a ,但是在发生碰撞时该方法的工作原理还没有得到一个直接的答案。 假设对象放置在相同的 键中 。它们存储在吗?它们是否被覆盖,以便仅存在该键中的最后一个对象存在?他们在使用其他碰撞方法吗? 如果将它们放在中,是否可以检索整个列表?如果不是,是否有其他 Java 内置地图可以在其中执行? 就我的目的而言,单独的链接将是理想的,就好像有冲突一样,我需要能够浏览列表并获取有关列表中