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