我可以使用Java计时器类进行定时数据收集吗?

时间:2014-04-10 02:20:38

标签: java timer

我正在编写一个程序,在试用期间收集一系列角度输入,并将这些输入保存到具有相应时间戳的文件中。

例如:

1秒260度

2秒45度

3秒60度

运行试用版时,如果需要,用户应该能够暂停并重新启动或完全中止试用。

我在暂停功能方面遇到了麻烦。我一直在使用Java Timer和TimerTask类来为输入计时,因为它提供了我正在寻找的许多功能(在延迟后启动任务,仅以特定间隔记录数据等)。

在我的timerTask中,我一直将收集的角度和时间存储在并行数组中,然后在试验结束时将这些数组写入文件。

但是,当我通过timer.cancel()函数“暂停”我的timerTask并重新启动它时,旧的数据数组将被丢弃。我试图通过保存“暂停”数组,然后在重新启动的试验结束时将其与“重新启动”数组合并来避开此问题,但这并不能解释试验可能多次暂停的事实。

timer / timerTask类是否用于此作业的错误类?有没有更好的方法在Java中收集基于时间的数据?或者我只是忽略了解决方案?

1 个答案:

答案 0 :(得分:0)

由于API指定了Timer.cancel()

  

终止此计时器,丢弃当前计划的任务。

实现所需功能的最简单方法可能是存储'暂停'布尔值,并在用户暂停/取消暂停时切换它。然后检查任务中布尔值的状态,如果暂停审判,则只需return;。计时器仍会每秒触发一次,但只要暂停试用就不会发生任何事情。