0

我有单例服务,它根据系统中发生的事件收集数据。我正在收集这些数据并将它们存储在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因为它的引用相同?

提前致谢。

4

1 回答 1

0

scheduleWithFixedDelay() 函数不会在每次运行时都创建 FiveMinWorker 的新实例。它在您设置的时间段后每次运行时都使用相同的实例。因此,无论任务运行多少次,基本上总是只有一个 FiveMinWorker 实例。

于 2014-03-10T19:07:54.860 回答