作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
有 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/
我是一名优秀的程序员,十分优秀!