当前位置:  开发笔记 > 编程语言 > 正文

Object.wait()超过了超时

如何解决《Object.wait()超过了超时》经验,为你挑选了1个好方法。

什么可以解释持续时间Object.wait(timeout)超过提供的超时值?

long start = System.currentTimeMillis();
obj.wait(1000);
long duration = System.currentTimeMillis() - start;
// sometimes (very rarely) duration may exceed 1500

上下文:在一个非常复杂的软件深处的某个地方,有一段代码可以wait生成这样的代码并在持续时间过长的情况下生成警告日志.在流量高的生产环境中,一些日志会报告巨大的等待(例如30秒).所以我试图重现它,了解可能发生的事情以及如何修复/改进它.



1> JJF..:

当一个线程在超时或睡眠醒来后实际唤醒时并不准确.睡眠的文件有这个说明

导致当前正在执行的线程休眠(暂时停止执行)指定的毫秒数,具体取决于系统计时器和调度程序的精度和准确性.该线程不会失去任何监视器的所有权.

通知也受这些差异的影响.

因此,它与系统中定时器的精度以及线程有资格再次运行的确切时间内正在执行的其他线程或进程有关.一般规则是超时,因为这是将经过的最小时间量.Object.notify有一个纳秒的变体,可以让你在经过的时间内获得更精细的颗粒控制.

看到的Javadoc描述 有关public final void wait(long timeout, int nanos)


我的回答是*不*解释OP添加的附加信息,编辑约30秒等待.
推荐阅读
可爱的天使keven_464
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有