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

使Java方法不中断的用例是什么

崔宇
2023-03-14
    null

正确的方法是不间断地睡眠。

public static void sleepUninterruptibly(long sleepFor, TimeUnit unit) {
    boolean interrupted = false;
    try {
      long remainingNanos = unit.toNanos(sleepFor);
      long end = System.nanoTime() + remainingNanos;
      while (true) {
        try {
          // TimeUnit.sleep() treats negative timeouts just like zero.
          NANOSECONDS.sleep(remainingNanos);
          return;
        } catch (InterruptedException e) {
          interrupted = true;
          remainingNanos = end - System.nanoTime();
        }
      }
    } finally {
      if (interrupted) {
        Thread.currentThread().interrupt();
      }
    }
  }

共有1个答案

龚振
2023-03-14

仅仅是因为方法没有强制调用方处理InterruptedException

调用方将不会接收interruptedexceptionThread.CurrentThread().Interrupt();仅设置内部标志,它不会抛出InterruptedException

可能有(我不知道一个真正的)情况下,等待而不被打断是有意义的。我确实知道一个理论上的问题,它可能会因为“虚假中断”而发生,即:没有真正原因的中断直接依赖于您的代码,如本文所述:

 类似资料:
  • 问题内容: 我正在使用JUnit 4.12。断言方法本质上不是通用的。例如,assertEquals方法看起来像: 为什么不是这样? 我觉得需要通用方法声明来更好地进行编译时检查和IDE自动完成。 问题答案: 具有这样的通用方法: 没有避免避免比较不同类型的类型安全:您可以将任何内容传递给此方法,因为它会退化到其上限: 而且也不能使用任何方法和未上找到。因此,基本上就是。 这样,添加泛型只会使实现

  • 问题内容: 有人告诉我,在OOP语言中使用Break and Continue标签不是OOP编程风格。您能否详细说明问题的原因和原因? 窍门在于这个标签词。我的意思是标记为中断/继续。 http://docs.oracle.com/javase/tutorial/java/nutsandbolts/branch.html 问题答案: 告诉您的人,这可能意味着break和Continue是分支语句(

  • 问题内容: 我正在与我的CompSci教授交谈,他建议将所有String 方法编写为: 而不是: 这两行都可以编译,但是我想知道第一种方法的好处是什么?我一直都是后一种方式。错了吗 什么是普通/常规? 问题答案: 第一种方法确保执行比较时不会收到 NullPointerException 。当您尝试在不存在的对象上调用方法时,抛出(发生)此异常。 以下是一些相关的切线:仔细阅读风险自负 不过要注意

  • 问题内容: 对于有关辅助程序/实用程序类的这些简单问题,我从未找到好的答案: 为什么我要创建一个单例(无状态)而不使用静态方法? 如果对象没有状态,为什么需要一个对象实例? 问题答案: 通常,单例用于向应用程序引入某种 全局状态 。(说实话,通常不是很必要,但这是另一个话题。) 但是,在一些极端情况下,甚至 无状态 单例也可能有用: 您希望在可预见的将来用状态扩展它。 由于某些特定的 技术 原因,

  • 问题内容: 考虑从官方的这段代码OpenJDK源码的: 这里的用例是什么,为什么一般来说编写这样的代码有意义? 问题答案: 仍然可以通过同一包中的代码访问成员。我的猜测是,该类在某些早期版本(可能甚至不是公共版本)中曾经是非最终的,然后被设置为最终的,并且受保护的方法保持原样,因为在使用它的同一包中可能有代码(而不是之所以将其更改为私有包,仅仅是因为没有人看到这样做的好处。

  • 这就是我目前拥有所有实体类的方式(此处仅显示一个以供参考) 来自lombok参考: @Data注释可能是项目Lombok工具集中最常用的注释。它结合了@ToString、@EqualsAndHashCode、@Getter和@Setter的功能。本质上,在类上使用@数据与使用默认的@ToString和@EqualsAndHashCode注释该类以及使用@Getter和@Setter注释每个字段是一