如何重新启动一个TimerTask(How to relaunch a TimerTask)

2019-08-07 05:04发布

我写了一个任务,通过套接字发送TCP的某些消息。 我有一大堆的消息和一些时间戳的文件,所以我编程任务作为一个TimerTask,我用的第一个消息时间戳的计时器定它。

当它完成,任务运行方式结束了,但其相关的线程保持,这不是取消。 如果我尝试用一​​种新的时间重新安排任务,我得到一个异常告诉我,我不能reschedulle一个schedulled或取消的任务。

我也试过补赛之前cancellig它,但很明显,作为异常告知,它仍然是同样的问题。

我不能用恒定perior计划任务让它重演,因为每封邮件都有一个时间,它不是恒定的。

我怎样才能重新安排TimerTask的? 顺便说一句,有没有等待任务结束的任何方式,就如同在socket通信时,它与块准备方法,直到消息到达?

Answer 1:

一个TimerTask的目的不是要重新安排,它是管理(单)线程定时器。

一个 定时器和许多 new TimerTasks:

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

最后现场引用一个Timer对象消失,所有未完成的任务已完成执行后, 计时器的任务执行线程[应]终止优雅 (并成为受垃圾收集)。

[从每个日程表的方法:]

抛出IllegalStateException异常,如果[一个TimerTask]已经安排或取消,计时器被取消,或者计时器线程已终止。

如果确实有很多线程由一个定时器产生了,那么这是这是不可能的错误:确保有真的只有一个正在使用Timer对象。

最后一个问题,如何个别事件撰写成工作流程,应该是一个独立的职务。



文章来源: How to relaunch a TimerTask