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

线程睡眠和准确的时间安排

金亦
2023-03-14
问题内容

我正在编写需要定时精确的代码。我用机器人进行一些操作,然后我用Thread.sleep(some_time)some_time行动之间要经过的。但是我没有得到最好的结果,因为当我搜索它时,它sleep是不准确的。做到这一点的最佳方法是什么?我的意思是Thread.sleep用其他方法模拟。


问题答案:

除非您使用专门为此设计的语言/框架,否则现代OS中的时序永远都不是精确的。但是,您可以在大多数操作系统中以合理的不确定性进行工作。但是“合理”取决于您要解决的问题。

在Java中,Thread.sleep是一个非常基本的实现,我认为这太过分了。Java提供这些基本线程工具不是因为它们是最佳解决方案,而是因为它们是基本工具。Java还提供了许多其他更复杂的工具,这些工具可能会更好地满足您的需求。

在示例中,如果您希望“精确”计时,则可以改用ScheduledExecutorService,后者使用OS调度服务来提供至少毫秒甚至十亿分之一秒的精度。尽管它不精确到十亿分之一秒(尽管有报价),但通常比Thread.sleep要精确得多。但是,在严重超载的系统上,这两种方法都不准确。如果这足以解决您的问题,那么您应该这样做。否则,您需要其他语言/执行环境。



 类似资料:
  • 我正在研究计算机硬件,在那里我们了解到使用硬件计时器比软件延迟获得更准确的结果。我已经在汇编中编写了1毫秒的软件延迟,我可以启动一个进程,使用这个延迟每毫秒重复一次,并使用计数器每100毫秒做一些其他事情,这种技术不如使用我现在要使用的硬件内置的硬件计时器准确。 所以我想知道Java内置的计时有多精确?我们有< code > system . current time millis 和< code

  • 我正在调用while循环内的线程Hibernate1秒。当标志为true时,循环将运行(标志为true无限时间)。在循环内,线程应Hibernate1秒,唤醒并增加计数器,检查IF条件,如果为FALSE,则应再次Hibernate1秒并继续29次。在第30次迭代中,IF条件为true,IF语句中调用的方法将收集并存储数据。最后,在第32次迭代中,第二个IF语句将把存储的数据发送到服务器,并将计数设

  • 我正在编写一个代码,希望在计时时有一定的精度。我使用机器人做一些动作,然后使用,以便在操作之间运行。但我并没有得到最好的结果,因为当我搜索它时,睡眠不准确。实现这一目标的最佳方式是什么?我的意思是模拟线程。用其他方法睡眠。

  • 脚本: 一群汽车从北向南(viceversa)沿着一条双车道道路行驶。过了一会儿,他们到达了一座桥。这座桥是单向的,通行能力有限。一辆汽车花100毫秒通过这座桥。不允许发生交通碰撞。 假设我需要计算,对于所有的车, 从车辆请求进入桥梁到开始穿越之间的时间。 例如:如果一辆向北行驶的汽车到达桥上,发现桥上有汽车向南行驶,它必须等待。它需要等多久?当然,如果只有一辆车(桥是空的),汽车的等待时间=0。

  • 问题内容: 有谁知道一个为Java提供Thread.sleep()的库,该库的错误不超过1-2毫秒? 我尝试了睡眠,错误测量和BusyWait的混合,但在不同的Windows机器上却无法获得这种可靠性。 如果该实现也可用于Linux和MacOS,则它可以是本机实现。 编辑 Nick提供的链接(http://blogs.oracle.com/dholmes/entry/inside_the_hots

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