当前位置: 首页 > 面试题库 >

睡眠的目的是什么(long millis,int nanos)?

壤驷棋
2023-03-14
问题内容

在JDK中,它实现为:

public static void sleep(long millis, int nanos) 
throws InterruptedException {
if (millis < 0) {
        throw new IllegalArgumentException("timeout value is negative");
}

if (nanos < 0 || nanos > 999999) {
        throw new IllegalArgumentException(
            "nanosecond timeout value out of range");
}

if (nanos >= 500000 || (nanos != 0 && millis == 0)) {
    millis++;
}

sleep(millis);
}

这意味着该nanos参数根本不执行任何操作。

它背后的想法是,在具有更准确时序的硬件上,针对它的JVM可以为其提供更好的实现吗?


问题答案:

常规操作系统没有足够细粒度的分辨率,无法一次睡眠数纳秒。但是,存在实时操作系统,其中安排事件在确切的时间发生是至关重要的,并且许多操作的延迟非常低。ABS系统是RTOS的一个示例。在此类系统上,纳秒级睡眠比在操作系统无法可靠地睡眠少于15ms的正常操作系统上有用得多。

但是,拥有两个单独的JDK并不是解决方案。因此,在Windows和Linux上,JVM将尽最大努力进行 x 纳秒的睡眠。



 类似资料:
  • 我使用 C 和 POSIX 线程创建了一个多线程应用程序。我现在应该阻塞一个线程(主线程),直到设置了布尔标志(变为真)。 我找到了两种方法来完成这件事。 > 在没有睡眠的情况下旋转。 在睡眠中旋转循环。 如果我应该遵循第一种方式,为什么有些人编写代码遵循第二种方式?如果应该使用第二种方法,为什么要让当前线程Hibernate呢?这种方式的缺点是什么?

  • 我有两个名为用户和从属的实体。我想在这两个实体之间建立一种一刀切的关系。正如OneToOne的真正含义所述- 用户实体中的每个用户都应该有且只有一个依赖项。并且Dependents实体中的每个dependent应该只与一个且仅与一个用户相关。 但当我将@OneToOne添加到Dependents实体时,它并不能阻止我将两个Dependent添加到同一个用户。@OneToOne或任何其他关系注释(如

  • 我是测试自动化的新手,尤其是Selenium。我正在使用Selenium网络驱动程序Eclipse。我遇到的最大问题之一是我们的脚本由于互联网速度或服务器性能而崩溃。我目前使用来解决这个问题。然而,这并不是秘密,强制等待时间直到计时器完成。我试图为下面的脚本找到一个优化的解决方案。在浏览了Stackoverflow上的帖子后,我找到了下面的)循环中提供的解决方案。有人建议使用: 以确保操作(单击按

  • 曾经,小法师还在魔法学院做魔法学徒的时候,经历过两次 鬼压床 第一次据现在已经四年了,当时的小法师甚至不知道这叫 “鬼压床”,只是完全不知所措,把此事定义为 “灵异事件” 让我们回到四年前,(括号中为运用《梦的解释》理论的分析): 当时小法师中午 shopping 回来,去睡了会午觉 又加上他在感冒,十分不舒服,小法师就用继续用催眠疗法 之前已经提过,小法师用此法后,就没做梦的烦恼,并且快两年了也

  • 自动睡眠 于一定时间内没有操作后,会自动进入睡眠模式以节省电力。 关 不自动进入睡眠模式 5分后 5分钟以后进入睡眠模式 10分后 10分钟以后进入睡眠模式 15分后 15分钟以后进入睡眠模式 提示 于进行以下操作时,自动睡眠机能可能会暂时失效。 连接交流电转换器时 玩游戏时 播放影像时 播放音乐时 播放幻灯片秀时 使用USB连接线与外接装置连接,启用USB模式时 聆听网上电台时* *  部份网上

  • 问题内容: 在我见过的Java类中 用于什么目的 问题答案: 来自维基百科: 数据库实例的 数据库目录 由元数据组成,其中存储了数据库对象的定义,例如基本表,视图(虚拟表),同义词,值范围,索引,用户和用户组。 另外,如果您的数据库是MySQL,请检查此内容。 希望能有所帮助。