【发布时间】:2014-11-18 06:20:21
【问题描述】:
我正在尝试在我的程序中设置一个“签入”线程,如果另一个线程没有在时间结束之前执行“签入”命令,它将引发异常。如果另一个线程在时间结束之前进行签入,则计时器会重置并侦听另一个签入。
我对 Java 的 Timer 对象并不太熟悉,但我假设最好的方法是使用 Timer,因为我能想到的唯一其他方法是启动一个带有Thread.sleep(time) 的新线程并在它唤醒之前中断它,然后重新实例化/启动它;如果它通过Thread.sleep(time) 它会抛出异常。不过,这似乎非常粗糙且效率低下。
所以,基本思路是这样的:
- 启动某种“超时”为 60 秒的计时器。
- 如果达到超时,则抛出异常。
- 如果另一个线程在计时器超时之前“签入”,则计时器会重置。
我怎样才能正确地做到这一点?
【问题讨论】:
-
哪里会抛出异常?
-
您可能还想查看 Java 中的线程执行器。与 Timer 非常相似,但功能更多。
-
您需要使用
ScheduledExecutorService。应该很简单。为什么你还需要这个?Thread不只是死... -
我正在使用它来监控一个外部程序,该程序可能由于警报提示而随机“卡住”。该程序位于远程系统上,因此很难时刻关注它。通常,当它应该处理的项目在几个小时内没有出现在另一端时,我们会发现问题。该程序可以通过打开一个套接字通过 JavaScript 与 Java 进行通信,但由于它只是单线程的,因此每隔一段时间让它“报告”更有意义(子任务只需要几秒钟,但整个项目处理可能需要一个小时或更长时间)。
标签: java multithreading timer checkin