gpt4 book ai didi

java - Object.wait() 超时

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:15:11 27 4
gpt4 key购买 nike

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

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

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

最佳答案

线程在超时到期或 sleep 唤醒后实际唤醒的时间并不准确。 sleep 文档有这个注释

Causes the currently executing thread to sleep (temporarily cease execution) for the specified number of milliseconds, subject to the precision and accuracy of system timers and schedulers. The thread does not lose ownership of any monitors.

notify 也受制于这些差异。

所以它与系统中计时器的精度以及在该线程有资格再次运行的确切时间其他线程或进程正在做什么有关。一般规则是超时,这是将要经过的最短时间。 Object.notify 有一个也需要纳秒的变体,可以让您更精细地控制流逝的时间量。

参见 the Javadoc description关于public final void wait(long timeout, int nanos)

关于java - Object.wait() 超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34093471/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com