在守护进程中更新变量 - Java

时间:2014-01-17 11:12:51

标签: java multithreading daemon

我有一个守护程序,它处理一些记录,并在其内存中有一些stored_data。我想根据发生的一些事件不断更新数据。

我知道我必须使用后台线程,它会将更改更新回主内存中的stored_data。但是如何将数据传递给线程?

目前我所知道的方式是: 1)将后台线程公开为将公开add apis的服务 2)让后台线程轮询一个特定的位置,该位置应该是记录添加内容的常用位置,并从那里进行选择。

如果那是正确的,请告诉我。感谢。

1 个答案:

答案 0 :(得分:1)

当你想到" polling"或者"按时间间隔更新",使用ScheduledExecutorService执行"检查数据更新"定期任务。您不需要守护程序线程来执行此操作,并且根据我的经验,使用计划任务可以使代码更易于维护。例如。在这种情况下,它将stored_data与线程分开,这是一件好事,因为线程不拥有数据(数据包含在不必是线程的对象中,例如,您可以传递stored_data变量到线程执行的Runnable

当您认为"事件驱动"时,守护程序线程是合适的,因为它将在事件发生时立即处理(无延迟)。您可以决定让守护程序线程为事件执行工作,或者为事件创建任务,并让ExecutorService执行这些任务,如CachedThreadPool。看看" Watching a directory"有关如何接收此类守护程序线程的文件系统事件的教程。