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

Java-替代thread.sleep

干善
2023-03-14
问题内容

我需要将while循环暂停特定的毫秒数。我尝试使用Thread.sleep(duration),但是它不准确,尤其是在循环场景中。毫秒精度在我的程序中很重要。

这是我不希望在expectedElapsedTime通过之前检查条件的算法。

while (condition) {
    time = System.currentTimeMillis();
    //do something
    if (elapsedTime(time) < expectedElapsedTime) ) {
        pause the loop  // NEED SUBSTITUTE FOR Thread.sleep()
    }
    // Alternative that I have tried but not giving good results is 
    while ((elapsedTime(time) < expectedElapsedTime)) {
        //do nothing
    }
}

long elapsedTime(long time) {
   long diff = System.currentTimeMillis() - time;
   return diff;
}

问题答案:

你能指望什么?

如果您进入睡眠状态,则一旦您的进程再次可运行,就必须等待线程调度程序再次对其进行调度。

我的意思是如果您进入睡眠状态50秒钟,这并不意味着您的进程将在完全50秒钟内运行,因为它一旦唤醒并可以运行,则必须等待安排到CPU,这需要额外的时间加上您的时间有上下文切换。

您无能为力,无法控制它,因此您无法达到所说的准确性。

对于您的情况,我建议改为旋转循环。

long now = System.currentTimeMillis();   
while(now < expectedElapsedTime){
    now = System.currentTimeMillis();
}


 类似资料:
  • 我正在寻找某种替代ImageJ(http://imagej.nih.gov/ij/)。对于那些不知道的人来说,ImageJ非常适合从用户编写的脚本中分析和创建这些tif文件。然而,我注意到在java项目中使用它(使用它的jar)是相当资源密集型的。我想知道是否有一些替代方案,也许对开发人员来说更好(不需要图形用户界面,但对内存更有效)。

  • 问题内容: 这只是理论问题。 我将JDBC与Java应用程序一起使用,以使用数据库(选择,插入,更新,删除等)。我制作了“手动” Java类,它将包含来自数据库表的数据(属性= db列)。然后,我进行查询(ResultSet),并用数据填充这些类。我不确定这是否正确。 但是我已经阅读了很多有关JDO和其他持久性解决方案的信息。 有人可以根据他们的经验推荐最佳使用的JDBC替代品吗? 我还想知道JD

  • 问题内容: 我一直在尝试设计一种用Pattern / Matcher实例替换多个String#replaceAll调用的方法,希望它比我当前在String中替换文本的方法要快,但是我不确定该怎么做关于它。 这是我要操作的字符串的示例: 如您所见,有多个@字符,中间有3个字符。情况总是如此。如果我想替换“ @ xxx @”的每个实例(其中xxx可以是0到9之间的任何小写字母或数字),最有效的解决方法

  • 我试图建立一个替代密码。对于我的密钥,我使用一个随机的256字节数组,它是256个可能字节值的排列。 这是通过以下方式设置的: 然后,我用以下方法对消息进行编码/解码: 在这个过程中,有些东西出了问题,我解码的任何东西都会作为一个 我不确定自己哪里出错了,也不确定这是否是最高效的做事方式,我必须保持相同的函数签名和通用方法,但实现细节由我决定。 感谢任何和所有的帮助。

  • 问题内容: 很多年前我使用过XStream,但是我发现自2008年以来就没有更新这些库(最新消息)。现在是否有一个更现代且最新的Java XML序列化库? 问题答案: 按照偏好,相关性和活动的顺序: 访问JAXB项目的站点,以查看教程和指南。还可以查看原始的JAXB体系结构白皮书。 上面列出的JAXB项目是API的参考实现,并由GlassFish Application Server打包在其中。

  • 问题内容: 这是一个从来没有一个正确答案的问题,我已经在网上搜索了很多次,却找不到解决方案。 它适用于Firefox,Chrome。我的responseText将像Réunion这样返回char,它将显示为奇怪的符号。 我尝试了许多方法,例如编码和解码,在响应文件中设置标头都无效。我没主意了。请帮助某人。 在主文件中,确保设置了内容类型和字符集。 在您的AJAX加载页面中,确保您位于顶部。 问题解