我有Singleton Service,它根据系统中发生的事件收集数据。我正在收集这些数据并将它们存储在HashMap
中,这是此Singleton服务的成员变量。每隔5分钟我需要将收集的数据写入磁盘。
为此,我正在执行Runnable任务。因为我无法将参数传递给java'run()'方法,
我创建了我的工作人员,如下所示:
FiveMinuteWorker fiveMinTask = new FiveMinuteWorker(hashMap);// hashMap of this singleton service.
我按如下方式执行runnable:
ScheduledFuture<?> fiveMinTask = fScheduler.scheduleWithFixedDelay(
fiveMinWorker, initialDelay, 5 * 60 * 1000, TimeUnit.MILLISECONDS
);
我有两个问题。
当Runnable
'运行'时,我将hashMap
中的数据缓存到磁盘,它会在运行后被垃圾收集,还是引用会挂起,因为它们保留了{{1}的引用来自Singleton Service,它将永远存在?
在HashMap
Runnable
缓存到磁盘后,我可以清除其内容,这将有效地清除Singleton Service HashMap
中的内容,因为它的引用相同?
提前致谢。
答案 0 :(得分:0)
scheduleWithFixedDelay()函数每次运行时都不会创建fiveMinWorker的新实例。每次在您设置的时间段后运行时,它都使用相同的实例。所以基本上总是只有一个五个工作者的实例,无论这个任务运行多少次。