Java 如何重新启动TimerTask

Java 如何重新启动TimerTask,java,timer,timertask,Java,Timer,Timertask,我编写了一个任务,通过套接字发送某个TCP消息。我有一个包含大量消息和一些时间戳的文件,因此我将任务编程为TimerTask,并使用带有第一个消息时间戳的计时器对其进行调度 当它完成时,任务运行方法结束,但其关联的线程保持不变,不会被取消。如果我尝试用新的时间重新安排任务,我会得到一个异常,告诉我我不能重新安排已安排或已取消的任务 我还尝试在重新安排之前取消它,但很明显,正如异常所告诉的,它仍然是相同的问题 我不能用一个固定的时间来安排任务,也不能让它自己重复,因为每条消息都有一个时间,它不是固

我编写了一个任务,通过套接字发送某个TCP消息。我有一个包含大量消息和一些时间戳的文件,因此我将任务编程为TimerTask,并使用带有第一个消息时间戳的计时器对其进行调度

当它完成时,任务运行方法结束,但其关联的线程保持不变,不会被取消。如果我尝试用新的时间重新安排任务,我会得到一个异常,告诉我我不能重新安排已安排或已取消的任务

我还尝试在重新安排之前取消它,但很明显,正如异常所告诉的,它仍然是相同的问题

我不能用一个固定的时间来安排任务,也不能让它自己重复,因为每条消息都有一个时间,它不是固定的


我如何重新安排时间任务?顺便问一下,有没有什么方法可以等待任务结束,就像在套接字通信中使用ready方法阻塞任务直到消息到达一样?

TimerTask不是为重新调度而设计的,它是管理(单个)线程的计时器

使用一个或多个
new
timertask:

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

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

[每种方法:]

如果[TimerTask]已计划或取消、计时器已取消或计时器线程终止,则引发IllegalStateException

如果一个计时器确实产生了许多线程,那么这将是一个不太可能出现的错误:确保确实只使用了一个计时器对象


最后一个问题是如何将单个事件组合到工作流中,这应该是一篇单独的文章。

TimerTask不是为了重新调度而设计的,它是管理(单个)线程的计时器

使用一个或多个
new
timertask:

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

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

[每种方法:]

如果[TimerTask]已计划或取消、计时器已取消或计时器线程终止,则引发IllegalStateException

如果一个计时器确实产生了许多线程,那么这将是一个不太可能出现的错误:确保确实只使用了一个计时器对象


最后一个问题是如何将单个事件组合到工作流中,这应该是一篇单独的帖子。

@pst事实上,如果我这样做,它会起作用。但正如我所指出的,关联的线程即使在其run方法到达终点后仍然可以工作。这意味着,当发送100条消息时,有100多个线程处于活动状态!我怎样才能解决这个问题?@pst确实,如果我这样做,它会起作用。但正如我所指出的,关联的线程即使在其run方法到达终点后仍然可以工作。这意味着,当发送100条消息时,有100多个线程处于活动状态!我怎样才能解决这个问题?