java - 如何在java中实现高效的超时

标签 java optimization timeout timertask

n 对象执行一些操作。执行操作后,时间戳将被更新。现在我想实现一个超时线程来验证时间戳是否早于例如 60 秒。

我的第一个解决方案是使用一个线程(while-loop + sleep)来实现,该线程持有一个包含所有对象的列表,包括最后一个时间戳。现在我遇到的问题是,最坏的情况是线程需要 59 秒加上 sleep 时间来决定超时。

我正在寻找一种解决方案,例如可以更新延迟时间的计时器。

有什么想法吗?

最佳答案

我认为使用带有 wait/notify 的监视器对象是合理的(如果您使用的 JDK >= 5,则可以将 Condition 与 await/signal 一起使用)

想法很简单:

工作线程:

doYourActualWork();
synchronized(jobFinishedMonitor) {
    updateTimestamp();

    jobFinishedMonitor.notify();
}

超时线程:

synchronized(jobFinishedMonitor) {
    while(within60Second(timestamp)) {
        jobFinishedMonitor.wait(60);
    }
    if (within60Second(timestamp)) {
        timeoutHappened=true;
    }
 }
 if (timeoutHappened) {
     // do timeout handling
 }

关于java - 如何在java中实现高效的超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11629267/

相关文章:

java - 我可以直接通过 getter 添加到私有(private)列表吗?

java - 初始化未知大小的多维/锯齿状字符串数组

java - 如何在 groovy 中列出 JVM 中的所有(groovy)类

ruby-on-rails - 处理超时::错误,重试

Azure函数不会早于设置值超时

python - 如何运行超时进程并在运行时仍然获得标准输出

java - Java中如何比较和统计多个Streams的元素?

c - 影响 gcc 中的函数克隆/复制/持续传播

python - 使用比核心更多的工作进程

r - 如何在R中优化整数参数(和其他不连续参数空间)?