我有单例服务,它根据系统中发生的事件收集数据。我正在收集这些数据并将它们存储在HashMap
这个单例服务的成员变量中。每 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
);
我有 2 个问题。
当Runnable
“运行”时,我将数据缓存hashMap
到磁盘中,它会在运行后被垃圾收集还是引用会挂起,因为它们持有HashMap
来自 Singleton Service 的引用,该引用将永远保留?
在缓存到磁盘Runnable
之后,HashMap
我可以清除其内容,这将有效地清除单例服务中的内容,hashMap
因为它的引用相同?
提前致谢。