如何重新启动TimerTask

我编写了一个通过套接字发送某个TCP消息的任务。 我有一个包含大量消息和一些时间戳的文件,因此我将任务编程为TimerTask,并使用带有第一个消息时间戳的Timer安排它。

完成后,任务运行方法结束,但其关联的线程仍然存在,它不会被取消。 如果我尝试用新的时间重新安排任务,我会得到一个例外,告诉我我不能重新安排调度或取消任务。

我还尝试在重新安排之前取消它,但显然,正如例外所述,它仍然是同样的问题。

我无法使用常量perior安排任务让它重复自己,因为每条消息都有一个时间而且它不是常数。

如何重新安排TimerTask? 顺便说一下,有没有什么方法可以等待任务结束,就像套接字通信一样,当它用就绪方法阻塞直到消息到达为止?

TimerTask不是为重新安排而设计的,它是管理(单个)线程的Timer。

使用一个 Timer和许多 new TimerTasks:

对应于每个Timer对象的是一个后台线程 ,用于执行所有计时器的任务,顺序执行。

在对Timer对象的最后一次实时引用消失并且所有未完成的任务都已完成执行之后, 计时器的任务执行线程[应该]正常终止 (并且变为垃圾回收)。

[来自每个计划方法:]

如果[TimerTask]已经被调度或取消,计时器被取消或计时器线程终止, 则抛出IllegalStateException

如果确实存在由单个Timer产生的许multithreading,那么这是一个不太可能的错误:确保实际上只有一个Timer对象被使用。

关于如何将单个事件组合成工作流的最后一个问题应该是一个单独的post。