Java Timer类说“计时器任务应该快速完成”,我们如何快速定义? 4 月,3 周 Questions & Answers 3457 我计划用它来轮询一个数据库,这可能需要10-15分钟或更长时间,所以我应该使用计时器来完成这项工作
# 2 楼答案 在这种情况下,这意味着您必须在下一个计时器事件发生之前完成工作,否则将无法处理下一个事件。因为timer类是全局的,所以您永远无法确定还有谁在使用它(例如,您的DB驱动程序可能正在使用它来实现超时) 如果您必须执行长时间的工作,请使用计时器“启动”另一个线程(将项目添加到工作队列或启动计时器事件处理程序中的第二个线程)。这将很快为下一个事件释放计时器
# 3 楼答案 我想你说的是java。util。计时器,而不是特定于摆动的计时器 如果我没记错的话,该计时器只是将执行延迟到一个后台线程,该线程基本上为JVM中的每个计时器实例提供服务,因此问题可能是一个计时器占用了该线程,而其他计时器则占用了该线程 如此快速将取决于应用程序的其余部分以及是否使用其他计时器 一般来说,我避免将它用于任何严肃的事情,或者我只是让它产生一个新的线程
# 5 楼答案 java.util.concurrent.ScheduledThreadPoolExecutor是“新的java.util.Timer”。你可以有很多线程(一个池),这样你就可以适应长时间运行的任务。即便如此,您可能需要考虑检查是否重叠太多。 当然,你可以有多个Timer,并适当地分配你的TimerTask
# 6 楼答案 如果你想快速完成任务,但实际上需要花更长的时间,你可以把它分成两部分。设置一个在计时器启动时运行的函数,以便在正确的时间发生事情,但随后将重要的处理推迟到另一个函数(例如,在不同的线程中),这可能需要多长时间。从API来看,计时器任务耗时过长的问题在于它们占用了线程,可能会延迟后续任务,因此将耗时的处理转移到另一个线程应该可以避免该问题。要回答标题中的问题,“快速”意味着“应该在计时器再次启动之前完成”
# 1 楼答案
计时器任务应该快速执行,轮询间隔与其使用无关。确保你没有混淆两者
# 2 楼答案
在这种情况下,这意味着您必须在下一个计时器事件发生之前完成工作,否则将无法处理下一个事件。因为timer类是全局的,所以您永远无法确定还有谁在使用它(例如,您的DB驱动程序可能正在使用它来实现超时)
如果您必须执行长时间的工作,请使用计时器“启动”另一个线程(将项目添加到工作队列或启动计时器事件处理程序中的第二个线程)。这将很快为下一个事件释放计时器
# 3 楼答案
我想你说的是java。util。计时器,而不是特定于摆动的计时器
如果我没记错的话,该计时器只是将执行延迟到一个后台线程,该线程基本上为JVM中的每个计时器实例提供服务,因此问题可能是一个计时器占用了该线程,而其他计时器则占用了该线程
如此快速将取决于应用程序的其余部分以及是否使用其他计时器
一般来说,我避免将它用于任何严肃的事情,或者我只是让它产生一个新的线程
# 4 楼答案
不过,如果从计时器任务中生成一个线程来完成工作,请注意时间触发的速度比线程完成的速度快,从而导致工作负载不断降低
# 5 楼答案
java.util.concurrent.ScheduledThreadPoolExecutor
是“新的java.util.Timer
”。你可以有很多线程(一个池),这样你就可以适应长时间运行的任务。即便如此,您可能需要考虑检查是否重叠太多。当然,你可以有多个
Timer
,并适当地分配你的TimerTask
# 6 楼答案
如果你想快速完成任务,但实际上需要花更长的时间,你可以把它分成两部分。设置一个在计时器启动时运行的函数,以便在正确的时间发生事情,但随后将重要的处理推迟到另一个函数(例如,在不同的线程中),这可能需要多长时间。从API来看,计时器任务耗时过长的问题在于它们占用了线程,可能会延迟后续任务,因此将耗时的处理转移到另一个线程应该可以避免该问题。要回答标题中的问题,“快速”意味着“应该在计时器再次启动之前完成”