栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

更改操作系统时间时sleep()中的Java错误:有任何解决方法?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

更改操作系统时间时sleep()中的Java错误:有任何解决方法?

根据错误通知单,您的线程不会冻结,一旦时钟赶上修改之前的时间,它们将恢复运行(因此,如果将其移回一小时,则您的线程将在1小时内恢复运行)。

当然,这仍然不是很有用。根本原因似乎是

Thread.sleep()
解决一个系统调用,该调用使线程进入睡眠状态,直到将来某个特定的时间戳记为止,而不是持续指定的持续时间。要解决此问题,您需要实现自己
Thread.sleep()
使用的版本,
System.nanoTime()
而不是使用
System.currentTimeMillis()
API或任何其他依赖时间的API。
Thread.sleep()
但是,我无法在不使用内置功能的情况下做到这一点。

编辑:

或者,如果您用另一种语言(例如C或您喜欢的其他语言)创建某个外部应用程序,该应用程序除了等待指定的时间后什么都不做,然后退出,该怎么办?然后,您可以生成此外部进程的新实例,然后在其上调用waitFor(),而不是在Java中调用Thread.sleep()。这将使Java线程出于所有实际目的“休眠”,并且只要您的外部应用程序能够以正确的时间休眠,它就会在正确的时间恢复运行而不会冻结,也不会影响CPU。

解决这个问题似乎还有很长的路要走,但这是我能想到的唯一可行的解​​决方法。同样,由于产生外部进程是一个相对昂贵的操作,因此,如果您睡眠相对较长的时间(例如几百毫秒或更长),则效果最好。在较短的时间内,它可能只会继续影响CPU。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/515356.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号