草庐IT

Java Thread.sleep 最短时间

coder 2024-04-01 原文

<分区>

TimeUnit.sleep(long timeout)文档这样描述它的论点:

timeout - the minimum time to sleep.

但是,我发现 — 至少在带有 Java 8 update 141 的 Windows 7 64 位上 — 线程 hibernate 的时间通常少于:

public static void main(String[] args) throws InterruptedException {
    final long from = TimeUnit.MILLISECONDS.toNanos(100);
    final long to   = TimeUnit.MILLISECONDS.toNanos(1000);
    final long step = TimeUnit.MILLISECONDS.toNanos(100);
    for (long requestedSleepDuration = from; requestedSleepDuration < to; requestedSleepDuration += step) {
        long sleepStartTime = System.nanoTime();
        TimeUnit.NANOSECONDS.sleep(requestedSleepDuration);
        long sleepEndTime = System.nanoTime();
        System.out.printf(
                "requested=%9d  actual=%9d  %s%n",
                requestedSleepDuration,
                sleepEndTime - sleepStartTime,
                (sleepEndTime - sleepStartTime >= requestedSleepDuration ? "OK" : " Slept less than minimum!"));
    }
}

典型输出:

requested=100000000  actual= 99534864  Slept less than minimum!
requested=200000000  actual=200063646  OK
requested=300000000  actual=299223086  Slept less than minimum!
requested=400000000  actual=399598620  Slept less than minimum!
requested=500000000  actual=499910360  Slept less than minimum!
requested=600000000  actual=600028523  OK
requested=700000000  actual=699604816  Slept less than minimum!
requested=800000000  actual=799230602  Slept less than minimum!
requested=900000000  actual=899490648  Slept less than minimum!

这似乎与文档相矛盾。然而,TimeUnit 文档还指出 TimeUnit.sleep()Thread.sleep 的便利包装器,而后者没有说明它是否保证至少 sleep 指定数量。

这是一个 API 实现错误,还是 TimeUnit.sleep 和/或 Thread.sleep 设计为仅 hibernate 大约,而不是至少,指定的持续时间?

有关Java Thread.sleep 最短时间的更多相关文章

  1. ruby - Watir ... sleep 和等待之间的区别 - 2

    有什么显着的区别吗sleep10和wait_until(10)他们似乎都在做同样的事情:WAITING10秒,然后继续下一步 最佳答案 sleep在指定时间内什么都不做。wait_untiltakesablock.它一直等到block评估为真或超时。如果没有给出block,它们的行为相同。 关于ruby-Watir...sleep和等待之间的区别,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/que

  2. ruby - `loop{}` 与 `loop{sleep 1}` - 2

    我正在使用循环等待键盘中断,然后在多线程环境中退出之前允许进行一些清理操作。beginloop{}rescueInterruptp"Ctr-CPressed..CleaningUp&ShuttingDown"loopdobreakifexit_bool.false?endexit130end这段代码运行在主线程中。有多个线程执行多个文件和数据库操作。exit_bool是一个由其他线程设置的原子变量,表示它们正处于某个操作的中间。我检查该值并等待它变为false然后退出。我想知道loop{}相对于loop{sleepx}的成本是多少。 最佳答案

  3. ruby - 我如何在不使用 ruby​​ 中的 sleep() 的情况下 rspec/test 一个 updated_at 字段? - 2

    如何在不使用sleep(1.second)方法的情况下编写规范?当我取消sleep时,我的测试会因为返回相同的时间戳而中断吗?我有以下类方法:defskipqs=find_or_create_by(user_id:user_id)qs.set_updated_atqs.n_skip+=1qs.save!end和以下规范:qs=skip(user.id)sleep(1.second)qs2=skip(user.id)qs.should_notbe_nilqs2.should_notbe_nil(qs.updated_at 最佳答案 我

  4. ruby-on-rails - 为什么在 after hook 中添加 "sleep 1"会导致此 Rspec/Capybara 测试通过? - 2

    我使用的是rails4.0.5、rspec2.14.1、capybara2.2.1、capybara-webkit1.1.0和database_cleaner1.2.0。我在以下功能测试中看到一些奇怪的行为(模拟用户查看帖子评论,将鼠标悬停在图标上以显示菜单,然后单击菜单项删除评论):let(:user){create(:user)}let(:post){create(:post,author:user)}let!(:comment){create(:comment,post:post,author:user)}...it"candeleteacomment"doassert(page

  5. Ruby sleep 到特定时间 - 2

    我怎么能写,我的代码休眠不是例如5秒,而是直到达到机器上的某个时间。不是这样的:sleep(5)但是像这样:now=DateTime.Nowwhilenow!="14:40:03"sleep(0.5)end怎么做才是正确的? 最佳答案 require"time"sleep(Time.parse("14:40:03")-Time.now) 关于Rubysleep到特定时间,我们在StackOverflow上找到一个类似的问题: https://stackover

  6. ruby - Rails 使用什么 sleep()? - 2

    我正在测试一段Rails代码,上面写着:sleep(10.0)在我的RSpec测试中,调用:Kernel.should_receive(:sleep).exactly(1).time失败,测试休眠了十秒。这使我得出结论,Rails程序中的sleep()并未调用Kernel.sleep()。我通过将我的Rails代码更改为以下内容来验证这一点:Kernel.sleep(10.0)...之后我的RSpec测试通过了(并且测试没有休眠)。这引出了一个具体的和一般的问题:Rails使用什么sleep()实现(我运行的是Ruby1.9.3/Rails3.2.1)?对于解释器,找到任何函数的源代码

  7. ruby - sleep() 对于作业调度应用程序的主循环来说是个好主意吗 - 2

    我正在为我的工作用Ruby编写一个作业调度应用程序(主要是为了以给定的频率使用各种协议(protocol)移动文件)我的主循环是这样的:whiletruedo#somecodetolaunchtheproperjobsleepCONFIG["interval"]end它的工作就像一个魅力,但我不确定它是否足够安全,因为该应用程序可能在运行cpu密集型软件的服务器上运行。是否有另一种方法可以做同样的事情,或者sleep()对我来说是否足够安全? 最佳答案 每当我觉得需要阻塞时,我都会使用事件循环;通常是libev。这是一个Ruby绑定

  8. ruby-on-rails - capybara / cucumber 的 sleep 功能? - 2

    我正在尝试测试我网站上的一个页面,该页面要求用户在继续之前至少在该页面上停留五秒钟。Capybara是否有办法让我的Cucumber测试在该页面上暂停并等待五秒钟,然后再继续我描述的下一步? 最佳答案 我的步骤定义中有这个:Given/^Iwaitfor(\d+)seconds?$/do|n|sleep(n.to_i)end在你的功能中:GivenIamonthewhateverpageAndIwaitfor5secondsAndIfollow"ALink"#etc... 关于ruby-

  9. ruby - RSpec: stubbing Kernel::sleep? - 2

    有没有办法在rspec场景中stubKernel.sleep? 最佳答案 如果你在一个对象的上下文中调用sleep,你应该把它放在对象上,像这样:classFoodefself.some_methodsleep5endendit"shouldcallsleep"doFoo.stub!(:sleep)Foo.should_receive(:sleep).with(5)Foo.some_methodend关键是,在调用sleep的上下文中将sleep存入任何“self”。 关于ruby-RS

  10. javascript - 如何仅使用 javascript 在短时间内更改按钮文本? - 2

    我正在制作一个购物车网站,我希望我的添加到购物车按钮在点击它时显示商品已添加,但只持续大约2秒然后它就会改变返回加入购物车。我该如何实现? 最佳答案 在纯Javascript中,您可以使用一个变量来检查按钮是否被单击,如果没有,则将按钮设置为所需的字符串并在两秒后将其改回。document.getElementById('button').addEventListener('click',function(clicked){returnfunction(){if(!clicked){varlast=this.innerHTML;th

随机推荐